[PATCH 2/2] perf, tools, list: Support matching by topic

From: Andi Kleen
Date: Wed Oct 19 2016 - 13:50:24 EST


From: Andi Kleen <ak@xxxxxxxxxxxxxxx>

Add support in perf list topic to only show events belonging to a specific
vendor events topic. For example the following works now:

% perf list frontend
List of pre-defined events (to be used in -e):

stalled-cycles-frontend OR idle-cycles-frontend [Hardware event]

stalled-cycles-frontend OR cpu/stalled-cycles-frontend/ [Kernel PMU event]

frontend:
dsb2mite_switches.count
[Decode Stream Buffer (DSB)-to-MITE switches]
dsb2mite_switches.penalty_cycles
[Decode Stream Buffer (DSB)-to-MITE switch true penalty cycles]
dsb_fill.exceed_dsb_lines
[Cycles when Decode Stream Buffer (DSB) fill encounter more than 3 Decode Stream Buffer (DSB)
lines]
icache.hit
[Number of Instruction Cache, Streaming Buffer and Victim Cache Reads. both cacheable and
noncacheable, including UC fetches]
...

Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx>
---
tools/perf/builtin-list.c | 6 ++++--
tools/perf/util/pmu.c | 4 +++-
2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c
index 1095a6dada66..c00b0eb343c0 100644
--- a/tools/perf/builtin-list.c
+++ b/tools/perf/builtin-list.c
@@ -67,9 +67,11 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
print_symbol_events(NULL, PERF_TYPE_SOFTWARE,
event_symbols_sw, PERF_COUNT_SW_MAX, raw_dump);
else if (strcmp(argv[i], "cache") == 0 ||
- strcmp(argv[i], "hwcache") == 0)
+ strcmp(argv[i], "hwcache") == 0) {
print_hwcache_events(NULL, raw_dump);
- else if (strcmp(argv[i], "pmu") == 0)
+ print_pmu_events(argv[i], raw_dump, !desc_flag,
+ long_desc_flag, true);
+ } else if (strcmp(argv[i], "pmu") == 0)
print_pmu_events(NULL, raw_dump, !desc_flag,
long_desc_flag, false);
else if (strcmp(argv[i], "sdt") == 0)
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index 101922b2a243..dc8eb30e8597 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -1142,7 +1142,9 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
if (event_glob != NULL &&
!(strglobmatch_nocase(name, event_glob) ||
(!is_cpu && strglobmatch_nocase(alias->name,
- event_glob))))
+ event_glob)) ||
+ (alias->topic &&
+ strglobmatch_nocase(alias->topic, event_glob))))
continue;

if (is_cpu && !name_only && !alias->desc)
--
2.5.5