[PATCH v8 00/29] perf tool: Add evsel to perf_sample

From: Ian Rogers

Date: Sat Apr 11 2026 - 02:57:42 EST


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@xxxxxxxxxx/
and there was a request to break it up.

v8: Fix address sanitizer issues with kwork and move patches, along
with bound check additions, to end of series.

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@xxxxxxxxxx/

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

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

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@xxxxxxxxxx/

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

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@xxxxxxxxxx/

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

Ian Rogers (29):
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 lock: Constify trace_lock_handler variables
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 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 | 250 +++++++++++-------
tools/perf/builtin-lock.c | 121 ++++-----
tools/perf/builtin-mem.c | 1 -
tools/perf/builtin-record.c | 3 +-
tools/perf/builtin-report.c | 38 ++-
tools/perf/builtin-sched.c | 188 ++++++-------
tools/perf/builtin-script.c | 22 +-
tools/perf/builtin-timechart.c | 151 ++++++-----
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/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 | 86 ++++--
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 | 9 +-
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 | 58 +++-
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 -
61 files changed, 926 insertions(+), 883 deletions(-)

--
2.53.0.1213.gd9a14994de-goog