perf dsos: Introduce dsos__for_each_dso()
To better abstract the dsos internals, introduce dsos__for_each_dso that does a callback on each dso. This also means the read lock can be correctly held. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Anne Macedo <retpolanne@posteo.net> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Ben Gainey <ben.gainey@arm.com> Cc: Changbin Du <changbin.du@huawei.com> Cc: Chengen Du <chengen.du@canonical.com> Cc: Colin Ian King <colin.i.king@gmail.com> Cc: Ilkka Koskinen <ilkka@os.amperecomputing.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: K Prateek Nayak <kprateek.nayak@amd.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linux.dev> Cc: Li Dong <lidong@vivo.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Markus Elfring <Markus.Elfring@web.de> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paran Lee <p4ranlee@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Song Liu <song@kernel.org> Cc: Sun Haiyong <sunhaiyong@loongson.cn> Cc: Thomas Richter <tmricht@linux.ibm.com> Cc: Yang Jihong <yangjihong1@huawei.com> Cc: Yanteng Si <siyanteng@loongson.cn> Cc: Yicong Yang <yangyicong@hisilicon.com> Cc: zhaimingbing <zhaimingbing@cmss.chinamobile.com> Link: https://lore.kernel.org/r/20240410064214.2755936-4-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
f649ed80f3
commit
73f3fea2e1
@ -1562,16 +1562,14 @@ out_put:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int machine__uses_kcore_cb(struct dso *dso, void *data __maybe_unused)
|
||||
{
|
||||
return dso__is_kcore(dso) ? 1 : 0;
|
||||
}
|
||||
|
||||
static bool machine__uses_kcore(struct machine *machine)
|
||||
{
|
||||
struct dso *dso;
|
||||
|
||||
list_for_each_entry(dso, &machine->dsos.head, node) {
|
||||
if (dso__is_kcore(dso))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return dsos__for_each_dso(&machine->dsos, machine__uses_kcore_cb, NULL) != 0 ? true : false;
|
||||
}
|
||||
|
||||
static bool perf_event__is_extra_kernel_mmap(struct machine *machine,
|
||||
@ -3137,16 +3135,28 @@ char *machine__resolve_kernel_addr(void *vmachine, unsigned long long *addrp, ch
|
||||
return sym->name;
|
||||
}
|
||||
|
||||
struct machine__for_each_dso_cb_args {
|
||||
struct machine *machine;
|
||||
machine__dso_t fn;
|
||||
void *priv;
|
||||
};
|
||||
|
||||
static int machine__for_each_dso_cb(struct dso *dso, void *data)
|
||||
{
|
||||
struct machine__for_each_dso_cb_args *args = data;
|
||||
|
||||
return args->fn(dso, args->machine, args->priv);
|
||||
}
|
||||
|
||||
int machine__for_each_dso(struct machine *machine, machine__dso_t fn, void *priv)
|
||||
{
|
||||
struct dso *pos;
|
||||
int err = 0;
|
||||
struct machine__for_each_dso_cb_args args = {
|
||||
.machine = machine,
|
||||
.fn = fn,
|
||||
.priv = priv,
|
||||
};
|
||||
|
||||
list_for_each_entry(pos, &machine->dsos.head, node) {
|
||||
if (fn(pos, machine, priv))
|
||||
err = -1;
|
||||
}
|
||||
return err;
|
||||
return dsos__for_each_dso(&machine->dsos, machine__for_each_dso_cb, &args);
|
||||
}
|
||||
|
||||
int machine__for_each_kernel_map(struct machine *machine, machine__map_t fn, void *priv)
|
||||
|
Reference in New Issue
Block a user