lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <69db965c-fdf3-0114-7317-8bf430b041a1@linux.intel.com>
Date:   Fri, 18 Oct 2019 22:09:44 +0800
From:   "Jin, Yao" <yao.jin@...ux.intel.com>
To:     acme@...nel.org, jolsa@...nel.org, peterz@...radead.org,
        mingo@...hat.com, alexander.shishkin@...ux.intel.com
Cc:     Linux-kernel@...r.kernel.org, ak@...ux.intel.com,
        kan.liang@...el.com, yao.jin@...el.com
Subject: Re: [PATCH] perf list: Hide deprecated events by default

Since now we go back to this version, can this patch be accepted?

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.jin@...ux.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);
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ