diff options
Diffstat (limited to 'tools/perf/util/pmu.c')
| -rw-r--r-- | tools/perf/util/pmu.c | 33 | 
1 files changed, 21 insertions, 12 deletions
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 92bd7fafcce6..93fe72a9dc0b 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1056,7 +1056,8 @@ error:   * Setup one of config[12] attr members based on the   * user input data - term parameter.   */ -static int pmu_config_term(struct list_head *formats, +static int pmu_config_term(const char *pmu_name, +			   struct list_head *formats,  			   struct perf_event_attr *attr,  			   struct parse_events_term *term,  			   struct list_head *head_terms, @@ -1082,16 +1083,24 @@ static int pmu_config_term(struct list_head *formats,  	format = pmu_find_format(formats, term->config);  	if (!format) { -		if (verbose > 0) -			printf("Invalid event/parameter '%s'\n", term->config); +		char *pmu_term = pmu_formats_string(formats); +		char *unknown_term; +		char *help_msg; + +		if (asprintf(&unknown_term, +				"unknown term '%s' for pmu '%s'", +				term->config, pmu_name) < 0) +			unknown_term = NULL; +		help_msg = parse_events_formats_error_string(pmu_term);  		if (err) { -			char *pmu_term = pmu_formats_string(formats); -  			parse_events__handle_error(err, term->err_term, -				strdup("unknown term"), -				parse_events_formats_error_string(pmu_term)); -			free(pmu_term); +						   unknown_term, +						   help_msg); +		} else { +			pr_debug("%s (%s)\n", unknown_term, help_msg); +			free(unknown_term);  		} +		free(pmu_term);  		return -EINVAL;  	} @@ -1168,7 +1177,7 @@ static int pmu_config_term(struct list_head *formats,  	return 0;  } -int perf_pmu__config_terms(struct list_head *formats, +int perf_pmu__config_terms(const char *pmu_name, struct list_head *formats,  			   struct perf_event_attr *attr,  			   struct list_head *head_terms,  			   bool zero, struct parse_events_error *err) @@ -1176,7 +1185,7 @@ int perf_pmu__config_terms(struct list_head *formats,  	struct parse_events_term *term;  	list_for_each_entry(term, head_terms, list) { -		if (pmu_config_term(formats, attr, term, head_terms, +		if (pmu_config_term(pmu_name, formats, attr, term, head_terms,  				    zero, err))  			return -EINVAL;  	} @@ -1196,8 +1205,8 @@ int perf_pmu__config(struct perf_pmu *pmu, struct perf_event_attr *attr,  	bool zero = !!pmu->default_config;  	attr->type = pmu->type; -	return perf_pmu__config_terms(&pmu->format, attr, head_terms, -				      zero, err); +	return perf_pmu__config_terms(pmu->name, &pmu->format, attr, +				      head_terms, zero, err);  }  static struct perf_pmu_alias *pmu_find_alias(struct perf_pmu *pmu,  | 
