• Hendrik Brueckner's avatar
    s390/cpum_cf: use perf software context for hardware counters · 9254e70c
    Hendrik Brueckner authored
    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: default avatarHendrik Brueckner <brueckner@linux.vnet.ibm.com>
    Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Acked-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    9254e70c
perf_cpum_cf.c 18.2 KB