s390/cpum_cf: use perf software context for hardware counters
On s390, there are two different hardware PMUs for counting and
sampling. Previously, both PMUs have shared the perf_hw_context
which is not correct and, recently, results in this warning:
------------[ cut here ]------------
WARNING: CPU: 5 PID: 1 at kernel/events/core.c:8485 perf_pmu_register+0x420/0x428
Modules linked in:
CPU: 5 PID: 1 Comm: swapper/0 Not tainted 4.7.0-rc1+ #2
task:
00000009c5240000 ti:
00000009c5234000 task.ti:
00000009c5234000
Krnl PSW :
0704c00180000000 0000000000220c50 (perf_pmu_register+0x420/0x428)
R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 RI:0 EA:3
Krnl GPRS:
ffffffffffffffff 0000000000b15ac6 0000000000000000 00000009cb440000
000000000022087a 0000000000000000 0000000000b78fa0 0000000000000000
0000000000a9aa90 0000000000000084 0000000000000005 000000000088a97a
0000000000000004 0000000000749dd0 000000000022087a 00000009c5237cc0
Krnl Code:
0000000000220c44:
a7f4ff54 brc 15,220aec
0000000000220c48:
92011000 mvi 0(%r1),1
#
0000000000220c4c:
a7f40001 brc 15,220c4e
>
0000000000220c50:
a7f4ff12 brc 15,220a74
0000000000220c54: 0707 bcr 0,%r7
0000000000220c56: 0707 bcr 0,%r7
0000000000220c58:
ebdff0800024 stmg %r13,%r15,128(%r15)
0000000000220c5e:
a7f13fe0 tmll %r15,16352
Call Trace:
([<
000000000022087a>] perf_pmu_register+0x4a/0x428)
([<
0000000000b2c25c>] init_cpum_sampling_pmu+0x14c/0x1f8)
([<
0000000000100248>] do_one_initcall+0x48/0x140)
([<
0000000000b25d26>] kernel_init_freeable+0x1e6/0x2a0)
([<
000000000072bda4>] kernel_init+0x24/0x138)
([<
000000000073495e>] kernel_thread_starter+0x6/0xc)
([<
0000000000734958>] kernel_thread_starter+0x0/0xc)
Last Breaking-Event-Address:
[<
0000000000220c4c>] perf_pmu_register+0x41c/0x428
---[ end trace
0c6ef9f5b771ad97 ]---
Using the perf_sw_context is an option because the cpum_cf PMU does
not use interrupts. To make this more clear, initialize the
capabilities in the PMU structure.
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Suggested-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>