diff options
Diffstat (limited to 'tools/perf/builtin-report.c')
| -rw-r--r-- | tools/perf/builtin-report.c | 14 | 
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 1ad75c7ba074..afe4a5539ecc 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -353,6 +353,7 @@ static int report__setup_sample_type(struct report *rep)  	struct perf_session *session = rep->session;  	u64 sample_type = evlist__combined_sample_type(session->evlist);  	bool is_pipe = perf_data__is_pipe(session->data); +	struct evsel *evsel;  	if (session->itrace_synth_opts->callchain ||  	    session->itrace_synth_opts->add_callchain || @@ -407,6 +408,19 @@ static int report__setup_sample_type(struct report *rep)  	}  	if (sort__mode == SORT_MODE__MEMORY) { +		/* +		 * FIXUP: prior to kernel 5.18, Arm SPE missed to set +		 * PERF_SAMPLE_DATA_SRC bit in sample type.  For backward +		 * compatibility, set the bit if it's an old perf data file. +		 */ +		evlist__for_each_entry(session->evlist, evsel) { +			if (strstr(evsel->name, "arm_spe") && +				!(sample_type & PERF_SAMPLE_DATA_SRC)) { +				evsel->core.attr.sample_type |= PERF_SAMPLE_DATA_SRC; +				sample_type |= PERF_SAMPLE_DATA_SRC; +			} +		} +  		if (!is_pipe && !(sample_type & PERF_SAMPLE_DATA_SRC)) {  			ui__error("Selected --mem-mode but no mem data. "  				  "Did you call perf record without -d?\n");  | 
