From: Andi Kleen <[email protected]>

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 <[email protected]>
---
 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

Reply via email to