|
|
@@ -859,6 +859,12 @@ static void apply_config_terms(struct perf_evsel *evsel,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static bool is_dummy_event(struct perf_evsel *evsel)
|
|
|
+{
|
|
|
+ return (evsel->attr.type == PERF_TYPE_SOFTWARE) &&
|
|
|
+ (evsel->attr.config == PERF_COUNT_SW_DUMMY);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* The enable_on_exec/disabled value strategy:
|
|
|
*
|
|
|
@@ -1097,6 +1103,14 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
|
|
|
else
|
|
|
perf_evsel__reset_sample_bit(evsel, PERIOD);
|
|
|
}
|
|
|
+
|
|
|
+ /*
|
|
|
+ * For initial_delay, a dummy event is added implicitly.
|
|
|
+ * The software event will trigger -EOPNOTSUPP error out,
|
|
|
+ * if BRANCH_STACK bit is set.
|
|
|
+ */
|
|
|
+ if (opts->initial_delay && is_dummy_event(evsel))
|
|
|
+ perf_evsel__reset_sample_bit(evsel, BRANCH_STACK);
|
|
|
}
|
|
|
|
|
|
static int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads)
|