Re: [PATCH v12 08/20] perf dsos: Skip BPF and OOL DSOs in dsos__find_kernel_dso()
From: Namhyung Kim
Date: Thu Nov 12 2026 - 01:45:15 EST
On Wed, Nov 11, 2026 at 09:42:00AM -0800, Ian Rogers wrote:
> 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 1574c8885d78..fbbf98c4ccae 100644
> --- a/tools/perf/util/dsos.c
> +++ b/tools/perf/util/dsos.c
> @@ -475,6 +475,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 5eb5efa4eb90..0334cb01349a 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);
Shouldn't this move into the if statement below? At least it should
check if the ksym_type is BPF.
Thanks,
Namhyung
> + 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.542.g3ef89b7020-goog
>