Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf/POWER7: Make some POWER7 events available in sysfs

Make some POWER7-specific perf events available in sysfs.

$ /bin/ls -1 /sys/bus/event_source/devices/cpu/events/
branch-instructions
branch-misses
cache-misses
cache-references
cpu-cycles
instructions
PM_BRU_FIN
PM_BRU_MPRED
PM_CMPLU_STALL
PM_CYC
PM_GCT_NOSLOT_CYC
PM_INST_CMPL
PM_LD_MISS_L1
PM_LD_REF_L1
stalled-cycles-backend
stalled-cycles-frontend

where the 'PM_*' events are POWER specific and the others are the
generic events.

This will enable users to specify these events with their symbolic
names rather than with their raw code.

perf stat -e 'cpu/PM_CYC' ...

Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Anton Blanchard <anton@au1.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: linuxppc-dev@ozlabs.org
Link: http://lkml.kernel.org/r/20130123062528.GE13720@us.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Sukadev Bhattiprolu and committed by
Arnaldo Carvalho de Melo
886c3b2d 1c53a270

+21
+3
arch/powerpc/include/asm/perf_event_server.h
··· 132 132 133 133 #define GENERIC_EVENT_ATTR(_name, _id) EVENT_ATTR(_name, _id, _g) 134 134 #define GENERIC_EVENT_PTR(_id) EVENT_PTR(_id, _g) 135 + 136 + #define POWER_EVENT_ATTR(_name, _id) EVENT_ATTR(PM_##_name, _id, _p) 137 + #define POWER_EVENT_PTR(_id) EVENT_PTR(_id, _p)
+18
arch/powerpc/perf/power7-pmu.c
··· 384 384 GENERIC_EVENT_ATTR(branch-instructions, BRU_FIN); 385 385 GENERIC_EVENT_ATTR(branch-misses, BRU_MPRED); 386 386 387 + POWER_EVENT_ATTR(CYC, CYC); 388 + POWER_EVENT_ATTR(GCT_NOSLOT_CYC, GCT_NOSLOT_CYC); 389 + POWER_EVENT_ATTR(CMPLU_STALL, CMPLU_STALL); 390 + POWER_EVENT_ATTR(INST_CMPL, INST_CMPL); 391 + POWER_EVENT_ATTR(LD_REF_L1, LD_REF_L1); 392 + POWER_EVENT_ATTR(LD_MISS_L1, LD_MISS_L1); 393 + POWER_EVENT_ATTR(BRU_FIN, BRU_FIN) 394 + POWER_EVENT_ATTR(BRU_MPRED, BRU_MPRED); 395 + 387 396 static struct attribute *power7_events_attr[] = { 388 397 GENERIC_EVENT_PTR(CYC), 389 398 GENERIC_EVENT_PTR(GCT_NOSLOT_CYC), ··· 402 393 GENERIC_EVENT_PTR(LD_MISS_L1), 403 394 GENERIC_EVENT_PTR(BRU_FIN), 404 395 GENERIC_EVENT_PTR(BRU_MPRED), 396 + 397 + POWER_EVENT_PTR(CYC), 398 + POWER_EVENT_PTR(GCT_NOSLOT_CYC), 399 + POWER_EVENT_PTR(CMPLU_STALL), 400 + POWER_EVENT_PTR(INST_CMPL), 401 + POWER_EVENT_PTR(LD_REF_L1), 402 + POWER_EVENT_PTR(LD_MISS_L1), 403 + POWER_EVENT_PTR(BRU_FIN), 404 + POWER_EVENT_PTR(BRU_MPRED), 405 405 NULL 406 406 }; 407 407