[PATCH v11 00/33] perf tool: Add evsel to perf_sample

Ian Rogers
2026-04-13T01:22:30Z

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 - all uses of the evsel need fixing up. Previously
I'd mailed this patch as an RFC with everything combined:
https://lore.kernel.org/lkml/20260126071822.447368-1-irogers@google.com/
and there was a request to break it up.

v11: Separate any remaining error path or other fixes out of
refactoring the evsel into sample. Incorporate Sashiko
feedback. Improve bounds checking for tracepoint data in
samples. Incorporate changes from Namhyung.

v10: Changes to some of the bounds checks as prompted by Sashiko.
https://lore.kernel.org/linux-perf-users/20260412020833.641177-1-irogers@google.com/

v9: Clean up some error path nits caught by Sashiko and simple bound
checks Sashiko recommended.
https://lore.kernel.org/linux-perf-users/20260411191710.524998-1-irogers@google.com/

v8: Fix address sanitizer issues with kwork and move patches, along
with bound check additions, to end of series.
https://lore.kernel.org/linux-perf-users/20260411065718.372240-1-irogers@google.com/

v7: Separate out kwork work->name to a strdup into its own patch, now patch 4.
https://lore.kernel.org/linux-perf-users/20260408072601.210837-1-irogers@google.com/

v6: Address more Sashiko feedback.
https://lore.kernel.org/lkml/20260404034325.3172592-1-irogers@google.com/

v5: Address feedback from Sashiko and Namhyung.
https://lore.kernel.org/lkml/20260403204017.2919994-1-irogers@google.com/

v4: Fix more sashiko issues: bounds checks, memory safety, making
refactors better, inconsistent evsels, mmap2 buildid injection
choice of evsel, mismatched function arguments.
https://sashiko.dev/#/patchset/20260320080835.724836-1-irogers%40google.com
https://lore.kernel.org/lkml/20260320192627.368357-1-irogers@google.com/

v3: Fix various sashiko review comments particularly about unintended
behavior changes.
https://lore.kernel.org/lkml/20260320080835.724836-1-irogers@google.com/

v2: Add review feedback on the first 2 patches from Namhyung, fix a
missed evsel assignment running event2evsel in builtin-inject.
https://lore.kernel.org/lkml/20260319232334.287517-1-irogers@google.com/

v1: https://lore.kernel.org/lkml/20260209174032.4142096-1-irogers@google.com/

Ian Rogers (33):
perf sample: Fix documentation typo
perf tool: Remove evsel from tool APIs that pass the sample
perf kvm: Don't pass evsel with sample
perf evsel: Refactor evsel tracepoint sample accessors perf_sample
perf trace: Don't pass evsel with sample
perf callchain: Don't pass evsel and sample
perf lock: Only pass sample to handlers
perf hist: Remove evsel parameter from inc samples functions
perf db-export: Remove evsel from struct export_sample
perf hist: Remove evsel from struct hist_entry_iter
perf report: Directly use sample->evsel to avoid computing from
sample->id
perf annotate: Don't pass evsel to add_sample
perf inject: Don't pass evsel with sample
perf kmem: Don't pass evsel with sample
perf kwork: Don't pass evsel with sample
perf sched: Don't pass evsel with sample
perf timechart: Don't pass evsel with sample
perf trace: Don't pass evsel with sample
perf evlist: Try to avoid computing evsel from sample
perf script: Don't pass evsel with sample
perf s390-sample-raw: Don't pass evsel or its PMU with sample
perf evsel: Don't pass evsel with sample
perf lock: Constify trace_lock_handler variables
perf lock: Avoid segv if event is missing a callchain
perf timechart: Fix memory leaks
perf kmem: Fix memory leaks on error path and when skipping
perf synthetic-events: Bound check when synthesizing mmap2 and
build_id events
perf kmem: Add bounds checks to tracepoint read values
perf sched: Bounds check CPU in sched switch events
perf timechart: Bounds check CPU
perf evsel: Add bounds checking to trace point raw data accessors
perf kwork: Fix address sanitizer issues
perf kwork: Fix memory management of kwork_work

tools/perf/builtin-annotate.c | 28 +-
tools/perf/builtin-c2c.c | 6 +-
tools/perf/builtin-diff.c | 5 +-
tools/perf/builtin-inject.c | 75 +++---
tools/perf/builtin-kmem.c | 95 ++++---
tools/perf/builtin-kvm.c | 22 +-
tools/perf/builtin-kwork.c | 253 +++++++++++-------
tools/perf/builtin-lock.c | 128 +++++----
tools/perf/builtin-mem.c | 1 -
tools/perf/builtin-record.c | 3 +-
tools/perf/builtin-report.c | 38 ++-
tools/perf/builtin-sched.c | 198 +++++++-------
tools/perf/builtin-script.c | 22 +-
tools/perf/builtin-timechart.c | 170 +++++++-----
tools/perf/builtin-top.c | 19 +-
tools/perf/builtin-trace.c | 121 +++++----
tools/perf/tests/hists_cumulate.c | 1 -
tools/perf/tests/hists_filter.c | 1 -
tools/perf/tests/hists_output.c | 1 -
tools/perf/tests/mmap-basic.c | 4 +-
tools/perf/tests/openat-syscall-tp-fields.c | 2 +-
tools/perf/tests/switch-tracking.c | 9 +-
tools/perf/util/annotate.c | 19 +-
tools/perf/util/annotate.h | 6 +-
tools/perf/util/bpf_kwork.c | 14 +-
tools/perf/util/build-id.c | 3 +-
tools/perf/util/build-id.h | 7 +-
tools/perf/util/callchain.c | 8 +-
tools/perf/util/callchain.h | 6 +-
tools/perf/util/data-convert-bt.c | 2 +-
tools/perf/util/data-convert-json.c | 5 +-
tools/perf/util/db-export.c | 13 +-
tools/perf/util/db-export.h | 3 +-
tools/perf/util/evsel.c | 133 ++++++---
tools/perf/util/evsel.h | 12 +-
tools/perf/util/hist.c | 26 +-
tools/perf/util/hist.h | 3 +-
tools/perf/util/intel-pt.c | 2 +-
tools/perf/util/intel-tpebs.c | 3 +-
tools/perf/util/jitdump.c | 2 +-
.../perf/util/kvm-stat-arch/kvm-stat-arm64.c | 19 +-
.../util/kvm-stat-arch/kvm-stat-loongarch.c | 17 +-
.../util/kvm-stat-arch/kvm-stat-powerpc.c | 17 +-
.../perf/util/kvm-stat-arch/kvm-stat-riscv.c | 17 +-
tools/perf/util/kvm-stat-arch/kvm-stat-s390.c | 20 +-
tools/perf/util/kvm-stat-arch/kvm-stat-x86.c | 70 ++---
tools/perf/util/kvm-stat.c | 19 +-
tools/perf/util/kvm-stat.h | 18 +-
tools/perf/util/kwork.h | 11 +-
tools/perf/util/machine.c | 14 +-
tools/perf/util/machine.h | 3 -
tools/perf/util/s390-sample-raw.c | 31 ++-
tools/perf/util/sample.h | 2 +-
.../util/scripting-engines/trace-event-perl.c | 23 +-
.../scripting-engines/trace-event-python.c | 47 ++--
tools/perf/util/session.c | 38 +--
tools/perf/util/synthetic-events.c | 49 ++--
tools/perf/util/synthetic-events.h | 2 -
tools/perf/util/tool.c | 4 +-
tools/perf/util/tool.h | 4 +-
tools/perf/util/trace-event-scripting.c | 5 +-
tools/perf/util/trace-event.h | 3 -
62 files changed, 988 insertions(+), 914 deletions(-)

--
2.53.0.1213.gd9a14994de-goog