Re: [PATCH v1 00/25] perf tool: Add evsel to perf_sample

From: Ian Rogers

Date: Wed Mar 04 2026 - 11:49:58 EST


On Tue, Mar 3, 2026 at 5:02 PM Namhyung Kim <namhyung@xxxxxxxxxx> wrote:
>
> On Mon, Feb 09, 2026 at 09:40:07AM -0800, 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 - 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.
> >
> > I've started the series by adding documentation to struct
> > perf_sample. Next I fixed missing perf_sample__init/exit largely from
> > the recent perf inject callchain rewriting work. The 3rd patch adds
> > the evsel to struct perf_sample and ensures it is correctly
> > initialized. The next 22 patches avoid passing the evsel along with
> > sample for different parts of the perf tool, along with some minor
> > tweaks like constification and not determining the evsel if it is
> > present in the sample.
>
> Do you have a patch for off-CPU on top of this change? I'd like to see
> what you expect before applying massive changes.

I'll need to rebase on top of these changes as it was on top of:
https://lore.kernel.org/lkml/20260126071822.447368-1-irogers@xxxxxxxxxx/
Wrt size, these changes are prior to adding extra comments... was:
57 files changed, 599 insertions(+), 749 deletions(-)
and last year we landed a clean up of:
https://lore.kernel.org/lkml/20251105001103.1296863-1-irogers@xxxxxxxxxx/#t
which was:
17 files changed, 130 insertions(+), 93 deletions(-)
but that was 1 patch and this is now broken into 25.

Thanks,
Ian


> Thanks,
> Namhyung
>
> >
> > Ian Rogers (25):
> > perf sample: Document struct perf_sample
> > perf sample: Make sure perf_sample__init/exit are used
> > perf sample: Add evsel to struct perf_sample
> > perf tool: Remove evsel from tool APIs that pass the sample
> > perf kvm: Don't pass evsel with sample
> > perf evsel: Refactor evsel__intval to perf_sample__intval
> > 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 with sample
> > perf evsel: Don't pass evsel with sample
> >
> > tools/perf/builtin-annotate.c | 28 ++-
> > tools/perf/builtin-c2c.c | 6 +-
> > tools/perf/builtin-diff.c | 5 +-
> > tools/perf/builtin-inject.c | 81 ++++----
> > tools/perf/builtin-kmem.c | 58 +++---
> > tools/perf/builtin-kvm.c | 22 +--
> > tools/perf/builtin-kwork.c | 104 ++++------
> > tools/perf/builtin-lock.c | 117 +++++------
> > tools/perf/builtin-mem.c | 1 -
> > tools/perf/builtin-record.c | 3 +-
> > tools/perf/builtin-report.c | 38 ++--
> > tools/perf/builtin-sched.c | 183 ++++++++----------
> > tools/perf/builtin-script.c | 26 ++-
> > tools/perf/builtin-timechart.c | 76 +++-----
> > tools/perf/builtin-top.c | 19 +-
> > tools/perf/builtin-trace.c | 103 +++++-----
> > tools/perf/tests/hists_cumulate.c | 3 +-
> > tools/perf/tests/hists_filter.c | 2 +-
> > tools/perf/tests/hists_output.c | 3 +-
> > 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 | 5 +-
> > 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 | 60 +++---
> > tools/perf/util/evsel.h | 12 +-
> > tools/perf/util/hist.c | 26 +--
> > tools/perf/util/hist.h | 3 +-
> > tools/perf/util/intel-pt.c | 12 +-
> > 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 | 15 +-
> > tools/perf/util/sample.c | 8 +-
> > tools/perf/util/sample.h | 93 ++++++++-
> > .../util/scripting-engines/trace-event-perl.c | 23 +--
> > .../scripting-engines/trace-event-python.c | 47 ++---
> > tools/perf/util/session.c | 74 ++++---
> > tools/perf/util/synthetic-events.c | 9 +-
> > 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, 769 insertions(+), 823 deletions(-)
> >
> > --
> > 2.53.0.239.g8d8fc8a987-goog
> >