• Stephane Eranian's avatar
    perf/x86/rapl: fix AMD event handling · 0036fb00
    Stephane Eranian authored
    The RAPL events exposed under /sys/devices/power/events should only reflect
    what the underlying hardware actually support. This is how it works on Intel
    RAPL and Intel core/uncore PMUs in general.
    But on AMD, this was not the case. All possible RAPL events were advertised.
    
    This is what it showed on an AMD Fam17h:
    $ ls /sys/devices/power/events/
    energy-cores        energy-gpu          energy-pkg          energy-psys
    energy-ram          energy-cores.scale  energy-gpu.scale    energy-pkg.scale
    energy-psys.scale   energy-ram.scale    energy-cores.unit   energy-gpu.unit
    energy-pkg.unit     energy-psys.unit    energy-ram.unit
    
    Yet, on AMD Fam17h, only energy-pkg is supported.
    
    This patch fixes the problem. Given the way perf_msr_probe() works, the
    amd_rapl_msrs[] table has to have all entries filled out and in particular
    the group field, otherwise perf_msr_probe() defaults to making the event
    visible.
    
    With the patch applied, the kernel now only shows was is actually supported:
    
    $ ls /sys/devices/power/events/
    energy-pkg  energy-pkg.scale  energy-pkg.unit
    
    The patch also uses the RAPL_MSR_MASK because only the 32-bits LSB of the
    RAPL counters are relevant when reading power consumption.
    Signed-off-by: default avatarStephane Eranian <eranian@google.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20220105185659.643355-1-eranian@google.com
    0036fb00
rapl.c 23.4 KB