return 0;
 }
 
+static void evlist__add_on_all_cpus(struct evlist *evlist, struct evsel *evsel)
+{
+       evsel->core.system_wide = true;
+
+       /*
+        * All CPUs.
+        *
+        * Note perf_event_open() does not accept CPUs that are not online, so
+        * in fact this CPU list will include only all online CPUs.
+        */
+       perf_cpu_map__put(evsel->core.own_cpus);
+       evsel->core.own_cpus = perf_cpu_map__new(NULL);
+       perf_cpu_map__put(evsel->core.cpus);
+       evsel->core.cpus = perf_cpu_map__get(evsel->core.own_cpus);
+
+       /* No threads */
+       perf_thread_map__put(evsel->core.threads);
+       evsel->core.threads = perf_thread_map__new_dummy();
+
+       evlist__add(evlist, evsel);
+}
+
+struct evsel *evlist__add_aux_dummy(struct evlist *evlist, bool system_wide)
+{
+       struct evsel *evsel = evlist__dummy_event(evlist);
+
+       if (!evsel)
+               return NULL;
+
+       evsel->core.attr.exclude_kernel = 1;
+       evsel->core.attr.exclude_guest = 1;
+       evsel->core.attr.exclude_hv = 1;
+       evsel->core.attr.freq = 0;
+       evsel->core.attr.sample_period = 1;
+       evsel->no_aux_samples = true;
+       evsel->name = strdup("dummy:u");
+
+       if (system_wide)
+               evlist__add_on_all_cpus(evlist, evsel);
+       else
+               evlist__add(evlist, evsel);
+
+       return evsel;
+}
+
 static int evlist__add_attrs(struct evlist *evlist, struct perf_event_attr *attrs, size_t nr_attrs)
 {
        struct evsel *evsel, *n;
 
 struct evsel *arch_evlist__leader(struct list_head *list);
 
 int evlist__add_dummy(struct evlist *evlist);
+struct evsel *evlist__add_aux_dummy(struct evlist *evlist, bool system_wide);
+static inline struct evsel *evlist__add_dummy_on_all_cpus(struct evlist *evlist)
+{
+       return evlist__add_aux_dummy(evlist, true);
+}
 
 int evlist__add_sb_event(struct evlist *evlist, struct perf_event_attr *attr,
                         evsel__sb_cb_t cb, void *data);