@@ -2078,7 +2078,13 @@ bool evsel__detect_missing_features(struct evsel *evsel)
* Must probe features in the order they were added to the
* perf_event_attr interface.
*/
- if (!perf_missing_features.branch_counters &&
+ if (!perf_missing_features.aux_pause_resume &&
+ (evsel->core.attr.aux_pause || evsel->core.attr.aux_resume ||
+ evsel->core.attr.aux_start_paused)) {
+ perf_missing_features.aux_pause_resume = true;
+ pr_debug2_peo("Kernel has no aux_pause/aux_resume support, bailing out\n");
+ return false;
+ } else if (!perf_missing_features.branch_counters &&
(evsel->core.attr.branch_sample_type & PERF_SAMPLE_BRANCH_COUNTERS)) {
perf_missing_features.branch_counters = true;
pr_debug2("switching off branch counters support\n");
@@ -3324,6 +3330,8 @@ int evsel__open_strerror(struct evsel *evsel, struct target *target,
return scnprintf(msg, size, "clockid feature not supported.");
if (perf_missing_features.clockid_wrong)
return scnprintf(msg, size, "wrong clockid (%d).", clockid);
+ if (perf_missing_features.aux_pause_resume)
+ return scnprintf(msg, size, "The 'aux_pause / aux_resume' feature is not supported, update the kernel.");
if (perf_missing_features.aux_output)
return scnprintf(msg, size, "The 'aux_output' feature is not supported, update the kernel.");
if (!target__has_cpu(target))
@@ -206,6 +206,7 @@ struct perf_missing_features {
bool weight_struct;
bool read_lost;
bool branch_counters;
+ bool aux_pause_resume;
};
extern struct perf_missing_features perf_missing_features;