Re: [PATCH v21 11/19] perf, tools: Add alias support for long descriptions

From: Arnaldo Carvalho de Melo
Date: Mon Oct 03 2016 - 20:21:04 EST


Em Thu, Sep 15, 2016 at 03:24:48PM -0700, Sukadev Bhattiprolu escreveu:
> Previously we were dropping the useful longer descriptions that some
> events have in the event list completely. Now that jevents provides
> support for longer descriptions (see previous patch), add support for
> parsing the long descriptions
>
> Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx>
> Signed-off-by: Sukadev Bhattiprolu <sukadev@xxxxxxxxxxxxxxxxxx>
> Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx>
> Acked-by: Ingo Molnar <mingo@xxxxxxxxxx>
> ---

This patch doesn't build, fixing... probably needs stuff that is in a
following patch.

- Arnaldo

> Changelog[v14]
> - [Jiri Olsa] Break up independent parts of the patch into
> separate patches.
> ---
> tools/perf/util/parse-events.c | 5 +++--
> tools/perf/util/parse-events.h | 3 ++-
> tools/perf/util/pmu.c | 15 ++++++++++-----
> tools/perf/util/pmu.h | 4 +++-
> 4 files changed, 18 insertions(+), 9 deletions(-)
>
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index a3c7739..9abd60d 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -2229,7 +2229,8 @@ out_enomem:
> /*
> * Print the help text for the event symbols:
> */
> -void print_events(const char *event_glob, bool name_only, bool quiet_flag)
> +void print_events(const char *event_glob, bool name_only, bool quiet_flag,
> + bool long_desc)
> {
> print_symbol_events(event_glob, PERF_TYPE_HARDWARE,
> event_symbols_hw, PERF_COUNT_HW_MAX, name_only);
> @@ -2239,7 +2240,7 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag)
>
> print_hwcache_events(event_glob, name_only);
>
> - print_pmu_events(event_glob, name_only, quiet_flag);
> + print_pmu_events(event_glob, name_only, quiet_flag, long_desc);
>
> if (event_glob != NULL)
> return;
> diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> index 795f2579..7efde4a 100644
> --- a/tools/perf/util/parse-events.h
> +++ b/tools/perf/util/parse-events.h
> @@ -171,7 +171,8 @@ void parse_events_update_lists(struct list_head *list_event,
> void parse_events_evlist_error(struct parse_events_evlist *data,
> int idx, const char *str);
>
> -void print_events(const char *event_glob, bool name_only, bool quiet);
> +void print_events(const char *event_glob, bool name_only, bool quiet,
> + bool long_desc);
>
> struct event_symbol {
> const char *symbol;
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index 2291d2a..43838b3 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -223,7 +223,7 @@ static int perf_pmu__parse_snapshot(struct perf_pmu_alias *alias,
> }
>
> static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
> - char *desc, char *val)
> + char *desc, char *val, char *long_desc)
> {
> struct perf_pmu_alias *alias;
> int ret;
> @@ -257,6 +257,8 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
> }
>
> alias->desc = desc ? strdup(desc) : NULL;
> + alias->long_desc = long_desc ? strdup(long_desc) :
> + desc ? strdup(desc) : NULL;
>
> list_add_tail(&alias->list, list);
>
> @@ -274,7 +276,7 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI
>
> buf[ret] = 0;
>
> - return __perf_pmu__new_alias(list, dir, name, NULL, buf);
> + return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL);
> }
>
> static inline bool pmu_alias_info_file(char *name)
> @@ -532,7 +534,8 @@ static int pmu_add_cpu_aliases(struct list_head *head)
>
> /* need type casts to override 'const' */
> __perf_pmu__new_alias(head, NULL, (char *)pe->name,
> - (char *)pe->desc, (char *)pe->event);
> + (char *)pe->desc, (char *)pe->event,
> + (char *)pe->long_desc);
> }
>
> out:
> @@ -1091,7 +1094,8 @@ static void wordwrap(char *s, int start, int max, int corr)
> }
> }
>
> -void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag)
> +void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
> + bool long_desc)
> {
> struct perf_pmu *pmu;
> struct perf_pmu_alias *alias;
> @@ -1139,7 +1143,8 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag)
> if (!aliases[j].name)
> goto out_enomem;
>
> - aliases[j].desc = alias->desc;
> + aliases[j].desc = long_desc ? alias->long_desc :
> + alias->desc;
> j++;
> }
> if (pmu->selectable &&
> diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
> index 42999c7..1aa614e 100644
> --- a/tools/perf/util/pmu.h
> +++ b/tools/perf/util/pmu.h
> @@ -39,6 +39,7 @@ struct perf_pmu_info {
> struct perf_pmu_alias {
> char *name;
> char *desc;
> + char *long_desc;
> struct list_head terms; /* HEAD struct parse_events_term -> list */
> struct list_head list; /* ELEM */
> char unit[UNIT_MAX_LEN+1];
> @@ -70,7 +71,8 @@ int perf_pmu__format_parse(char *dir, struct list_head *head);
>
> struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
>
> -void print_pmu_events(const char *event_glob, bool name_only, bool quiet);
> +void print_pmu_events(const char *event_glob, bool name_only, bool quiet,
> + bool long_desc);
> bool pmu_have_event(const char *pname, const char *name);
>
> int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt,
> --
> 1.8.3.1