Em Wed, Oct 19, 2016 at 10:50:02AM -0700, Andi Kleen escreveu:
> 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) {

This is changing existing behaviour, please remove it. A separate patch
could either make it show both hwcache events and vendor cache events,
or you could make:

  perf list vendor cache

Do what you expect.

>                       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);

What is this here?

>               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