[PATCH v8 08/19] perf dsos: Skip BPF and OOL DSOs in dsos__find_kernel_dso()

From: Ian Rogers

Date: Thu Oct 22 2026 - 16:16:01 EST


In machine__process_ksymbol_register(), set the binary type of non-OOL
ksymbol DSOs to DSO_BINARY_TYPE__BPF_IMAGE (which
machine__process_bpf_event_load() upgrades to
DSO_BINARY_TYPE__BPF_PROG_INFO on PERF_BPF_EVENT_PROG_LOAD), and update
dsos__find_kernel_dso_cb() to skip DSO_BINARY_TYPE__BPF_PROG_INFO,
DSO_BINARY_TYPE__BPF_IMAGE, and DSO_BINARY_TYPE__OOL so that
dsos__find_kernel_dso() does not match ksymbol DSOs in machine->dsos.

Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
---
tools/perf/util/dsos.c | 3 +++
tools/perf/util/machine.c | 9 ++++-----
2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/tools/perf/util/dsos.c b/tools/perf/util/dsos.c
index 40267d3a725d..2df0ce58421e 100644
--- a/tools/perf/util/dsos.c
+++ b/tools/perf/util/dsos.c
@@ -474,6 +474,9 @@ static int dsos__find_kernel_dso_cb(struct dso *dso, void *data)
* is_kernel_module() treats it as a kernel cpumode.
*/
if (!dso__kernel(dso) ||
+ dso__binary_type(dso) == DSO_BINARY_TYPE__BPF_PROG_INFO ||
+ dso__binary_type(dso) == DSO_BINARY_TYPE__BPF_IMAGE ||
+ dso__binary_type(dso) == DSO_BINARY_TYPE__OOL ||
is_kernel_module(dso__long_name(dso), PERF_RECORD_MISC_CPUMODE_UNKNOWN))
return 0;

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 1d9d3bf57720..cb77e82ed842 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -769,6 +769,10 @@ static int machine__process_ksymbol_register(struct machine *machine,
dso__set_binary_type(dso, DSO_BINARY_TYPE__OOL);
dso__data(dso)->file_size = event->ksymbol.len;
dso__set_loaded(dso);
+ } else {
+ dso__set_binary_type(dso, DSO_BINARY_TYPE__BPF_IMAGE);
+ if (is_bpf_image(event->ksymbol.name))
+ dso__set_long_name(dso, "", false);
}

map__set_start(map, event->ksymbol.addr);
@@ -780,11 +784,6 @@ static int machine__process_ksymbol_register(struct machine *machine,
}

dso__set_loaded(dso);
-
- if (is_bpf_image(event->ksymbol.name)) {
- dso__set_binary_type(dso, DSO_BINARY_TYPE__BPF_IMAGE);
- dso__set_long_name(dso, "", false);
- }
} else {
dso = dso__get(map__dso(map));
}
--
2.56.0.307.g5fe7bd680c-goog