Em Fri, Oct 18, 2019 at 04:24:12PM +0200, Jiri Olsa escreveu: > On Fri, Oct 18, 2019 at 10:09:44PM +0800, Jin, Yao wrote: > > Since now we go back to this version, can this patch be accepted? > > right, sry > > Acked-by: Jiri Olsa <jo...@kernel.org>
Applied. > thanks, > jirka > > > > > Thanks > > Jin Yao > > > > On 10/15/2019 10:53 AM, Jin Yao wrote: > > > There are some deprecated events listed by perf list. But we can't remove > > > them from perf list with ease because some old scripts may use them. > > > > > > Deprecated events are old names of renamed events. When an event gets > > > renamed the old name is kept around for some time and marked with > > > Deprecated. The newer Intel event lists in the tree already have these > > > headers. > > > > > > So we need to keep them in the event list, but provide a new option to > > > show them. The new option is "--deprecated". > > > > > > With this patch, the deprecated events are hidden by default but they can > > > be displayed when option "--deprecated" is enabled. > > > > > > Signed-off-by: Jin Yao <yao....@linux.intel.com> > > > --- > > > tools/perf/Documentation/perf-list.txt | 3 +++ > > > tools/perf/builtin-list.c | 14 ++++++++++---- > > > tools/perf/pmu-events/jevents.c | 26 ++++++++++++++++++++------ > > > tools/perf/pmu-events/jevents.h | 3 ++- > > > tools/perf/pmu-events/pmu-events.h | 1 + > > > tools/perf/util/parse-events.c | 4 ++-- > > > tools/perf/util/parse-events.h | 2 +- > > > tools/perf/util/pmu.c | 17 +++++++++++++---- > > > tools/perf/util/pmu.h | 4 +++- > > > 9 files changed, 55 insertions(+), 19 deletions(-) > > > > > > diff --git a/tools/perf/Documentation/perf-list.txt > > > b/tools/perf/Documentation/perf-list.txt > > > index 18ed1b0fceb3..6345db33c533 100644 > > > --- a/tools/perf/Documentation/perf-list.txt > > > +++ b/tools/perf/Documentation/perf-list.txt > > > @@ -36,6 +36,9 @@ Enable debugging output. > > > Print how named events are resolved internally into perf events, and > > > also > > > any extra expressions computed by perf stat. > > > +--deprecated:: > > > +Print deprecated events. By default the deprecated events are hidden. > > > + > > > [[EVENT_MODIFIERS]] > > > EVENT MODIFIERS > > > --------------- > > > diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c > > > index 08e62ae9d37e..965ef017496f 100644 > > > --- a/tools/perf/builtin-list.c > > > +++ b/tools/perf/builtin-list.c > > > @@ -26,6 +26,7 @@ int cmd_list(int argc, const char **argv) > > > int i; > > > bool raw_dump = false; > > > bool long_desc_flag = false; > > > + bool deprecated = false; > > > struct option list_options[] = { > > > OPT_BOOLEAN(0, "raw-dump", &raw_dump, "Dump raw > > > events"), > > > OPT_BOOLEAN('d', "desc", &desc_flag, > > > @@ -34,6 +35,8 @@ int cmd_list(int argc, const char **argv) > > > "Print longer event descriptions."), > > > OPT_BOOLEAN(0, "details", &details_flag, > > > "Print information on the perf event names > > > and expressions used internally by events."), > > > + OPT_BOOLEAN(0, "deprecated", &deprecated, > > > + "Print deprecated events."), > > > OPT_INCR(0, "debug", &verbose, > > > "Enable debugging output"), > > > OPT_END() > > > @@ -55,7 +58,7 @@ int cmd_list(int argc, const char **argv) > > > if (argc == 0) { > > > print_events(NULL, raw_dump, !desc_flag, long_desc_flag, > > > - details_flag); > > > + details_flag, deprecated); > > > return 0; > > > } > > > @@ -78,7 +81,8 @@ int cmd_list(int argc, const char **argv) > > > print_hwcache_events(NULL, raw_dump); > > > else if (strcmp(argv[i], "pmu") == 0) > > > print_pmu_events(NULL, raw_dump, !desc_flag, > > > - long_desc_flag, details_flag); > > > + long_desc_flag, details_flag, > > > + deprecated); > > > else if (strcmp(argv[i], "sdt") == 0) > > > print_sdt_events(NULL, NULL, raw_dump); > > > else if (strcmp(argv[i], "metric") == 0 || > > > strcmp(argv[i], "metrics") == 0) > > > @@ -91,7 +95,8 @@ int cmd_list(int argc, const char **argv) > > > if (sep == NULL) { > > > print_events(argv[i], raw_dump, > > > !desc_flag, > > > long_desc_flag, > > > - details_flag); > > > + details_flag, > > > + deprecated); > > > continue; > > > } > > > sep_idx = sep - argv[i]; > > > @@ -117,7 +122,8 @@ int cmd_list(int argc, const char **argv) > > > print_hwcache_events(s, raw_dump); > > > print_pmu_events(s, raw_dump, !desc_flag, > > > long_desc_flag, > > > - details_flag); > > > + details_flag, > > > + deprecated); > > > print_tracepoint_events(NULL, s, raw_dump); > > > print_sdt_events(NULL, s, raw_dump); > > > metricgroup__print(true, true, s, raw_dump, > > > details_flag); > > > diff --git a/tools/perf/pmu-events/jevents.c > > > b/tools/perf/pmu-events/jevents.c > > > index e2837260ca4d..7d69727f44bd 100644 > > > --- a/tools/perf/pmu-events/jevents.c > > > +++ b/tools/perf/pmu-events/jevents.c > > > @@ -322,7 +322,8 @@ static int print_events_table_entry(void *data, char > > > *name, char *event, > > > char *desc, char *long_desc, > > > char *pmu, char *unit, char *perpkg, > > > char *metric_expr, > > > - char *metric_name, char *metric_group) > > > + char *metric_name, char *metric_group, > > > + char *deprecated) > > > { > > > struct perf_entry_data *pd = data; > > > FILE *outfp = pd->outfp; > > > @@ -354,6 +355,8 @@ static int print_events_table_entry(void *data, char > > > *name, char *event, > > > fprintf(outfp, "\t.metric_name = \"%s\",\n", > > > metric_name); > > > if (metric_group) > > > fprintf(outfp, "\t.metric_group = \"%s\",\n", > > > metric_group); > > > + if (deprecated) > > > + fprintf(outfp, "\t.deprecated = \"%s\",\n", deprecated); > > > fprintf(outfp, "},\n"); > > > return 0; > > > @@ -371,6 +374,7 @@ struct event_struct { > > > char *metric_expr; > > > char *metric_name; > > > char *metric_group; > > > + char *deprecated; > > > }; > > > #define ADD_EVENT_FIELD(field) do { if (field) { \ > > > @@ -398,6 +402,7 @@ struct event_struct { > > > op(metric_expr); \ > > > op(metric_name); \ > > > op(metric_group); \ > > > + op(deprecated); \ > > > } while (0) > > > static LIST_HEAD(arch_std_events); > > > @@ -416,7 +421,8 @@ static void free_arch_std_events(void) > > > static int save_arch_std_events(void *data, char *name, char *event, > > > char *desc, char *long_desc, char *pmu, > > > char *unit, char *perpkg, char > > > *metric_expr, > > > - char *metric_name, char *metric_group) > > > + char *metric_name, char *metric_group, > > > + char *deprecated) > > > { > > > struct event_struct *es; > > > @@ -479,7 +485,8 @@ static int > > > try_fixup(const char *fn, char *arch_std, char **event, char **desc, > > > char **name, char **long_desc, char **pmu, char **filter, > > > char **perpkg, char **unit, char **metric_expr, char > > > **metric_name, > > > - char **metric_group, unsigned long long eventcode) > > > + char **metric_group, unsigned long long eventcode, > > > + char **deprecated) > > > { > > > /* try to find matching event from arch standard values */ > > > struct event_struct *es; > > > @@ -507,7 +514,8 @@ int json_events(const char *fn, > > > char *long_desc, > > > char *pmu, char *unit, char *perpkg, > > > char *metric_expr, > > > - char *metric_name, char *metric_group), > > > + char *metric_name, char *metric_group, > > > + char *deprecated), > > > void *data) > > > { > > > int err; > > > @@ -536,6 +544,7 @@ int json_events(const char *fn, > > > char *metric_expr = NULL; > > > char *metric_name = NULL; > > > char *metric_group = NULL; > > > + char *deprecated = NULL; > > > char *arch_std = NULL; > > > unsigned long long eventcode = 0; > > > struct msrmap *msr = NULL; > > > @@ -614,6 +623,8 @@ int json_events(const char *fn, > > > addfield(map, &unit, "", "", val); > > > } else if (json_streq(map, field, "PerPkg")) { > > > addfield(map, &perpkg, "", "", val); > > > + } else if (json_streq(map, field, "Deprecated")) { > > > + addfield(map, &deprecated, "", "", val); > > > } else if (json_streq(map, field, > > > "MetricName")) { > > > addfield(map, &metric_name, "", "", > > > val); > > > } else if (json_streq(map, field, > > > "MetricGroup")) { > > > @@ -658,12 +669,14 @@ int json_events(const char *fn, > > > err = try_fixup(fn, arch_std, &event, &desc, > > > &name, > > > &long_desc, &pmu, &filter, > > > &perpkg, > > > &unit, &metric_expr, > > > &metric_name, > > > - &metric_group, eventcode); > > > + &metric_group, eventcode, > > > + &deprecated); > > > if (err) > > > goto free_strings; > > > } > > > err = func(data, name, real_event(name, event), desc, > > > long_desc, > > > - pmu, unit, perpkg, metric_expr, metric_name, > > > metric_group); > > > + pmu, unit, perpkg, metric_expr, metric_name, > > > + metric_group, deprecated); > > > free_strings: > > > free(event); > > > free(desc); > > > @@ -673,6 +686,7 @@ int json_events(const char *fn, > > > free(pmu); > > > free(filter); > > > free(perpkg); > > > + free(deprecated); > > > free(unit); > > > free(metric_expr); > > > free(metric_name); > > > diff --git a/tools/perf/pmu-events/jevents.h > > > b/tools/perf/pmu-events/jevents.h > > > index 4684c673c445..5cda49a42143 100644 > > > --- a/tools/perf/pmu-events/jevents.h > > > +++ b/tools/perf/pmu-events/jevents.h > > > @@ -7,7 +7,8 @@ int json_events(const char *fn, > > > char *long_desc, > > > char *pmu, > > > char *unit, char *perpkg, char > > > *metric_expr, > > > - char *metric_name, char *metric_group), > > > + char *metric_name, char *metric_group, > > > + char *deprecated), > > > void *data); > > > char *get_cpu_str(void); > > > diff --git a/tools/perf/pmu-events/pmu-events.h > > > b/tools/perf/pmu-events/pmu-events.h > > > index 92a4d15ee0b9..caeb577d36c9 100644 > > > --- a/tools/perf/pmu-events/pmu-events.h > > > +++ b/tools/perf/pmu-events/pmu-events.h > > > @@ -17,6 +17,7 @@ struct pmu_event { > > > const char *metric_expr; > > > const char *metric_name; > > > const char *metric_group; > > > + const char *deprecated; > > > }; > > > /* > > > diff --git a/tools/perf/util/parse-events.c > > > b/tools/perf/util/parse-events.c > > > index b5e2adef49de..db882f630f7e 100644 > > > --- a/tools/perf/util/parse-events.c > > > +++ b/tools/perf/util/parse-events.c > > > @@ -2600,7 +2600,7 @@ void print_symbol_events(const char *event_glob, > > > unsigned type, > > > * Print the help text for the event symbols: > > > */ > > > void print_events(const char *event_glob, bool name_only, bool > > > quiet_flag, > > > - bool long_desc, bool details_flag) > > > + bool long_desc, bool details_flag, bool deprecated) > > > { > > > print_symbol_events(event_glob, PERF_TYPE_HARDWARE, > > > event_symbols_hw, PERF_COUNT_HW_MAX, > > > name_only); > > > @@ -2612,7 +2612,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, long_desc, > > > - details_flag); > > > + details_flag, deprecated); > > > if (event_glob != NULL) > > > return; > > > diff --git a/tools/perf/util/parse-events.h > > > b/tools/perf/util/parse-events.h > > > index 616ca1eda0eb..769e07cddaa2 100644 > > > --- a/tools/perf/util/parse-events.h > > > +++ b/tools/perf/util/parse-events.h > > > @@ -195,7 +195,7 @@ void parse_events_evlist_error(struct > > > parse_events_state *parse_state, > > > int idx, const char *str); > > > void print_events(const char *event_glob, bool name_only, bool quiet, > > > - bool long_desc, bool details_flag); > > > + bool long_desc, bool details_flag, bool deprecated); > > > struct event_symbol { > > > const char *symbol; > > > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > > > index 5608da82ad23..adbe97e941dd 100644 > > > --- a/tools/perf/util/pmu.c > > > +++ b/tools/perf/util/pmu.c > > > @@ -308,7 +308,8 @@ static int __perf_pmu__new_alias(struct list_head > > > *list, char *dir, char *name, > > > char *long_desc, char *topic, > > > char *unit, char *perpkg, > > > char *metric_expr, > > > - char *metric_name) > > > + char *metric_name, > > > + char *deprecated) > > > { > > > struct parse_events_term *term; > > > struct perf_pmu_alias *alias; > > > @@ -325,6 +326,7 @@ static int __perf_pmu__new_alias(struct list_head > > > *list, char *dir, char *name, > > > alias->unit[0] = '\0'; > > > alias->per_pkg = false; > > > alias->snapshot = false; > > > + alias->deprecated = false; > > > ret = parse_events_terms(&alias->terms, val); > > > if (ret) { > > > @@ -379,6 +381,9 @@ static int __perf_pmu__new_alias(struct list_head > > > *list, char *dir, char *name, > > > alias->per_pkg = perpkg && sscanf(perpkg, "%d", &num) == 1 && > > > num == 1; > > > alias->str = strdup(newval); > > > + if (deprecated) > > > + alias->deprecated = true; > > > + > > > if (!perf_pmu_merge_alias(alias, list)) > > > list_add_tail(&alias->list, list); > > > @@ -400,7 +405,7 @@ static int perf_pmu__new_alias(struct list_head > > > *list, char *dir, char *name, FI > > > strim(buf); > > > return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL, > > > NULL, NULL, > > > - NULL, NULL, NULL); > > > + NULL, NULL, NULL, NULL); > > > } > > > static inline bool pmu_alias_info_file(char *name) > > > @@ -787,7 +792,8 @@ static void pmu_add_cpu_aliases(struct list_head > > > *head, struct perf_pmu *pmu) > > > (char *)pe->long_desc, (char > > > *)pe->topic, > > > (char *)pe->unit, (char *)pe->perpkg, > > > (char *)pe->metric_expr, > > > - (char *)pe->metric_name); > > > + (char *)pe->metric_name, > > > + (char *)pe->deprecated); > > > } > > > } > > > @@ -1383,7 +1389,7 @@ 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, > > > - bool long_desc, bool details_flag) > > > + bool long_desc, bool details_flag, bool deprecated) > > > { > > > struct perf_pmu *pmu; > > > struct perf_pmu_alias *alias; > > > @@ -1414,6 +1420,9 @@ void print_pmu_events(const char *event_glob, bool > > > name_only, bool quiet_flag, > > > format_alias(buf, sizeof(buf), pmu, > > > alias); > > > bool is_cpu = !strcmp(pmu->name, "cpu"); > > > + if (alias->deprecated && !deprecated) > > > + continue; > > > + > > > if (event_glob != NULL && > > > !(strglobmatch_nocase(name, event_glob) || > > > (!is_cpu && > > > strglobmatch_nocase(alias->name, > > > diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h > > > index f36ade6df76d..3e8cd31a89cc 100644 > > > --- a/tools/perf/util/pmu.h > > > +++ b/tools/perf/util/pmu.h > > > @@ -57,6 +57,7 @@ struct perf_pmu_alias { > > > double scale; > > > bool per_pkg; > > > bool snapshot; > > > + bool deprecated; > > > char *metric_expr; > > > char *metric_name; > > > }; > > > @@ -85,7 +86,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, > > > - bool long_desc, bool details_flag); > > > + bool long_desc, bool details_flag, > > > + bool deprecated); > > > 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, ...) __scanf(3, 4); > > > -- - Arnaldo