diff options
Diffstat (limited to 'tools/perf/util/parse-events.c')
| -rw-r--r-- | tools/perf/util/parse-events.c | 31 | 
1 files changed, 19 insertions, 12 deletions
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 9f7260e69113..c4d2394e2b2d 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -37,6 +37,7 @@  #include "util/evsel_config.h"  #include "util/event.h"  #include "util/pfm.h" +#include "perf.h"  #define MAX_NAME_LEN 100 @@ -1533,19 +1534,23 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,  	evsel = __add_event(list, &parse_state->idx, &attr, true,  			    get_config_name(head_config), pmu,  			    &config_terms, auto_merge_stats, NULL); -	if (evsel) { -		evsel->unit = info.unit; -		evsel->scale = info.scale; -		evsel->per_pkg = info.per_pkg; -		evsel->snapshot = info.snapshot; -		evsel->metric_expr = info.metric_expr; -		evsel->metric_name = info.metric_name; -		evsel->pmu_name = name ? strdup(name) : NULL; -		evsel->use_uncore_alias = use_uncore_alias; -		evsel->percore = config_term_percore(&evsel->config_terms); -	} +	if (!evsel) +		return -ENOMEM; + +	evsel->pmu_name = name ? strdup(name) : NULL; +	evsel->use_uncore_alias = use_uncore_alias; +	evsel->percore = config_term_percore(&evsel->config_terms); -	return evsel ? 0 : -ENOMEM; +	if (parse_state->fake_pmu) +		return 0; + +	evsel->unit = info.unit; +	evsel->scale = info.scale; +	evsel->per_pkg = info.per_pkg; +	evsel->snapshot = info.snapshot; +	evsel->metric_expr = info.metric_expr; +	evsel->metric_name = info.metric_name; +	return 0;  }  int parse_events_multi_pmu_add(struct parse_events_state *parse_state, @@ -1794,6 +1799,8 @@ static int get_event_modifier(struct event_modifier *mod, char *str,  		if (*str == 'u') {  			if (!exclude)  				exclude = eu = ek = eh = 1; +			if (!exclude_GH && !perf_guest) +				eG = 1;  			eu = 0;  		} else if (*str == 'k') {  			if (!exclude)  | 
