perf evlist: Fix error out while applying initial delay and LBR
[linux-2.6-microblaze.git] / tools / perf / util / evsel.c
index 5285da0..ddf84b9 100644 (file)
@@ -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)