Re: [PATCH v14 00/32] perf tools: Add evsel to perf_sample

From: Arnaldo Carvalho de Melo

Date: Wed May 20 2026 - 17:49:17 EST


On Wed, May 20, 2026 at 05:49:57PM -0300, Arnaldo Carvalho de Melo wrote:
> On Wed, May 20, 2026 at 01:40:48PM -0700, Ian Rogers wrote:
> > On Wed, May 20, 2026 at 12:46 PM Arnaldo Carvalho de Melo
> > <acme@xxxxxxxxxx> wrote:
> > >
> > > On Wed, May 20, 2026 at 04:15:30PM -0300, Arnaldo Carvalho de Melo wrote:
> > > > On Wed, May 20, 2026 at 12:05:06PM -0700, Ian Rogers wrote:
> > > > > Nearly all perf code ends up passing an evsel with the perf_sample,
> > > > > which is problematic if you want to rewrite the evsel (such as with
> > > > > off-CPU processing) because all uses of the evsel need to be fixed
> > > > > up. Since the perf_sample now carries its own resolved evsel pointer,
> > > > > passing evsel separately is redundant and error-prone (allowing
> > > > > parameter divergence bugs).
> > > > >
> > > > > This series cleans up the redundant evsel parameter across all perf
> > > > > tool subcommands and APIs, ensuring that tools uniformly retrieve
> > > > > event attributes directly from the sample itself. This simplifies
> > > > > function signatures and improves API consistency.
> > > > >
> > > > > Additionally, this series incorporates subsequent memory safety
> > > > > improvements, robust bounds checking, and memory leak corrections
> > > > > prompted by address sanitizers and Sashiko code reviews.
> > > > >
> > > > > The original combined RFC patch:
> > > > > https://lore.kernel.org/lkml/20260126071822.447368-1-irogers@xxxxxxxxxx/
> > > > > was split up per reviewer requests.
> > > > >
> > > > > v14:
> > > > > - Incorporate Acked-by tags from Namhyung Kim.
> > > > > - Re-polish and expand commit descriptions to provide thorough explanations
> > > > > of the changes and their rationale.
> > > >
> > > > Thanks, tentatively applying it to perf-tools-next, for v7.2.
> > >
> > > Had to apply a minor fixup for a conflict with anoter patch series from
> > > you, the LBR one.
> >
> > Sorry for that and thanks for dealing with the conflict! Any chance
> > you could push to tmp.perf-tools-next? I have some other series that
> > will conflict and it would be nice to rebase those changes there.
>
> I just removed the last two patches, the ones for kwork, as:
>
> + make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= NO_LIBELF=1 -C tools/perf O=/tmp/build/perf
> make: Entering directory '/git/perf-7.1.0-rc2/tools/perf'
> BUILD: Doing 'make -j32' parallel build
> Makefile.config:647: Warning: Disabled BPF skeletons as libelf is required by bpftool
> Makefile.config:745: Disabling post unwind, no support found.
> Makefile.config:856: Missing python setuptools, the python binding won't be built, please install python3-setuptools or equivalent
> Makefile.config:1045: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev
> Makefile.config:1110: libpfm4 not found, disables libpfm4 support. Please install libpfm-devel or libpfm4-dev
> Makefile.config:1135: Rust is not found. Test workloads with rust are disabled.
>
> Auto-detecting system features:
> ... libdw: [ on ]
> ... glibc: [ on ]
> ... libelf: [ on ]
> ... libnuma: [ on ]
> ... numa_num_possible_cpus: [ on ]
> ... libpython: [ on ]
> ... libcapstone: [ on ]
> ... llvm-perf: [ on ]
> ... zlib: [ on ]
> ... lzma: [ on ]
> ... bpf: [ on ]
> ... libaio: [ on ]
> ... libzstd: [ on ]
> ... libopenssl: [ on ]
> ... rust: [ OFF ]
>
> CC /tmp/build/perf/dlfilters/dlfilter-test-api-v0.o
> <SNIP>
> LINK /tmp/build/perf/perf
> /usr/bin/ld: /tmp/build/perf/perf-in.o: in function `work_pop_atom':
> builtin-kwork.c:(.text+0x59c92): undefined reference to `work_exit'
> /usr/bin/ld: /tmp/build/perf/perf-in.o: in function `work_push_atom.constprop.0':
> builtin-kwork.c:(.text+0x5aba8): undefined reference to `work_exit'
> /usr/bin/ld: /tmp/build/perf/perf-in.o: in function `cmd_kwork':
> (.text+0x5bb4b): undefined reference to `work_exit'
> /usr/bin/ld: (.text+0x5bbae): undefined reference to `work_exit'
> /usr/bin/ld: (.text+0x5c3b2): undefined reference to `work_exit'
> collect2: error: ld returned 1 exit status
> make[2]: *** [Makefile.perf:586: /tmp/build/perf/perf] Error 1
> make[1]: *** [Makefile.perf:289: sub-make] Error 2
> make: *** [Makefile:76: all] Error 2
> make: Leaving directory '/git/perf-7.1.0-rc2/tools/perf'
> + exit 1
> toolsbuilder@five:~$
>
>
> I'm doing some more tests, just a moment and I'll push what I have to
> tmp.perf-tools-next.

Also:

toolsbuilder@five:~$ cat dm.log/almalinux\:8
<SNIP>
OLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugs.almalinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.5.0 20210514 (Red Hat 8.5.0-28) (GCC)
+ make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= -C tools/perf O=/tmp/build/perf
make: Entering directory '/git/perf-7.1.0-rc2/tools/perf'
BUILD: Doing 'make -j32' parallel build
Makefile.config:1045: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev
Makefile.config:1061: No libcapstone found, disables disasm engine support for 'perf script', please install libcapstone-dev/capstone-devel
Makefile.config:1110: libpfm4 not found, disables libpfm4 support. Please install libpfm-devel or libpfm4-dev
Makefile.config:1135: Rust is not found. Test workloads with rust are disabled.

Auto-detecting system features:
... libdw: [ on ]
... glibc: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libpython: [ on ]
... libcapstone: [ OFF ]
... llvm-perf: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
... libopenssl: [ on ]
... rust: [ OFF ]

CC /tmp/build/perf/dlfilters/dlfilter-test-api-v0.o
CC /tmp/build/perf/dlfilters/dlfilter-test-api-v2.o
<SNIP>
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/cache.json
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/counter.json
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/floating-point.json
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/frontend.json
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/memory.json
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/other.json
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/pipeline.json
COPY /tmp/build/perf/ <- pmu-events/arch/x86/westmereex/virtual-memory.json
GEN /tmp/build/perf/pmu-events/test-empty-pmu-events.c
Traceback (most recent call last):
File "pmu-events/jevents.py", line 1524, in <module>
main()
File "pmu-events/jevents.py", line 1487, in main
with concurrent.futures.ProcessPoolExecutor(initializer=_init_worker, initargs=(_arch_std_events,)) as executor:
TypeError: __init__() got an unexpected keyword argument 'initializer'
make[3]: *** [pmu-events/Build:176: /tmp/build/perf/pmu-events/test-empty-pmu-events.c] Error 1
make[3]: *** Deleting file '/tmp/build/perf/pmu-events/test-empty-pmu-events.c'
make[2]: *** [Makefile.perf:554: /tmp/build/perf/pmu-events/pmu-events-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....