lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 11 May 2022 15:50:30 -0700 From: Namhyung Kim <namhyung@...nel.org> To: Adrian Hunter <adrian.hunter@...el.com> Cc: Arnaldo Carvalho de Melo <acme@...nel.org>, Jiri Olsa <jolsa@...hat.com>, Ian Rogers <irogers@...gle.com>, Alexey Bayduraev <alexey.v.bayduraev@...ux.intel.com>, Leo Yan <leo.yan@...aro.org>, linux-kernel <linux-kernel@...r.kernel.org> Subject: Re: [PATCH V3 13/23] perf evlist: Add evlist__add_dummy_on_all_cpus() On Wed, May 11, 2022 at 12:02 AM Adrian Hunter <adrian.hunter@...el.com> wrote: > > Add evlist__add_dummy_on_all_cpus() to enable creating a system-wide dummy > event that sets up the system-wide maps before map propagation. > > For convenience, add evlist__add_aux_dummy() so that the logic can be used > whether or not the event needs to be system-wide. > > Signed-off-by: Adrian Hunter <adrian.hunter@...el.com> > --- > > Changes in V3: Amended comment about all CPUs. > > tools/perf/util/evlist.c | 45 ++++++++++++++++++++++++++++++++++++++++ > tools/perf/util/evlist.h | 5 +++++ > 2 files changed, 50 insertions(+) > > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index 78c47cbafbc2..2b2900434bba 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -264,6 +264,51 @@ int evlist__add_dummy(struct evlist *evlist) > 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); Maybe I'm missing something.. Wouldn't it be overwritten by the user requested cpus during map propagation in evlist__add()? Thanks, Namhyung > + > + /* 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; > diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h > index 4062f5aebfc1..1bde9ccf4e7d 100644 > --- a/tools/perf/util/evlist.h > +++ b/tools/perf/util/evlist.h > @@ -114,6 +114,11 @@ int arch_evlist__add_default_attrs(struct evlist *evlist); > 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); > -- > 2.25.1 >
Powered by blists - more mailing lists