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

Ian Rogers posted 25 patches 1 week, 5 days ago
tools/perf/builtin-annotate.c                 |  28 ++-
tools/perf/builtin-c2c.c                      |   6 +-
tools/perf/builtin-diff.c                     |   5 +-
tools/perf/builtin-inject.c                   |  87 ++++----
tools/perf/builtin-kmem.c                     |  85 ++++----
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                    | 188 ++++++++----------
tools/perf/builtin-script.c                   |  26 ++-
tools/perf/builtin-timechart.c                | 145 +++++++-------
tools/perf/builtin-top.c                      |  19 +-
tools/perf/builtin-trace.c                    | 120 +++++------
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/perf-record.c                |   1 +
tools/perf/tests/switch-tracking.c            |  11 +-
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                   |  18 +-
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/evlist.c                      |   5 +-
tools/perf/util/evsel.c                       | 101 +++++++---
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/powerpc-vpadtl.c              |  10 +-
tools/perf/util/s390-sample-raw.c             |  31 +--
tools/perf/util/sample.c                      |  11 +-
tools/perf/util/sample.h                      | 119 ++++++++++-
.../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            |  45 +++--
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 -
65 files changed, 973 insertions(+), 883 deletions(-)
[PATCH v4 00/25] perf tool: Add evsel to perf_sample
Posted by Ian Rogers 1 week, 5 days ago
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.

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.

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

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 (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 or its PMU 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                   |  87 ++++----
 tools/perf/builtin-kmem.c                     |  85 ++++----
 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                    | 188 ++++++++----------
 tools/perf/builtin-script.c                   |  26 ++-
 tools/perf/builtin-timechart.c                | 145 +++++++-------
 tools/perf/builtin-top.c                      |  19 +-
 tools/perf/builtin-trace.c                    | 120 +++++------
 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/perf-record.c                |   1 +
 tools/perf/tests/switch-tracking.c            |  11 +-
 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                   |  18 +-
 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/evlist.c                      |   5 +-
 tools/perf/util/evsel.c                       | 101 +++++++---
 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/powerpc-vpadtl.c              |  10 +-
 tools/perf/util/s390-sample-raw.c             |  31 +--
 tools/perf/util/sample.c                      |  11 +-
 tools/perf/util/sample.h                      | 119 ++++++++++-
 .../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            |  45 +++--
 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 -
 65 files changed, 973 insertions(+), 883 deletions(-)

-- 
2.53.0.959.g497ff81fa9-goog
Re: [PATCH v4 00/25] perf tool: Add evsel to perf_sample
Posted by Ian Rogers 1 day, 3 hours ago
On Fri, Mar 20, 2026 at 12:27 PM Ian Rogers <irogers@google.com> 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@google.com/
> 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.
>
> 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
>
> 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 (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 or its PMU with sample
>   perf evsel: Don't pass evsel with sample

Ping.

Thanks,
Ian

>  tools/perf/builtin-annotate.c                 |  28 ++-
>  tools/perf/builtin-c2c.c                      |   6 +-
>  tools/perf/builtin-diff.c                     |   5 +-
>  tools/perf/builtin-inject.c                   |  87 ++++----
>  tools/perf/builtin-kmem.c                     |  85 ++++----
>  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                    | 188 ++++++++----------
>  tools/perf/builtin-script.c                   |  26 ++-
>  tools/perf/builtin-timechart.c                | 145 +++++++-------
>  tools/perf/builtin-top.c                      |  19 +-
>  tools/perf/builtin-trace.c                    | 120 +++++------
>  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/perf-record.c                |   1 +
>  tools/perf/tests/switch-tracking.c            |  11 +-
>  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                   |  18 +-
>  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/evlist.c                      |   5 +-
>  tools/perf/util/evsel.c                       | 101 +++++++---
>  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/powerpc-vpadtl.c              |  10 +-
>  tools/perf/util/s390-sample-raw.c             |  31 +--
>  tools/perf/util/sample.c                      |  11 +-
>  tools/perf/util/sample.h                      | 119 ++++++++++-
>  .../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            |  45 +++--
>  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 -
>  65 files changed, 973 insertions(+), 883 deletions(-)
>
> --
> 2.53.0.959.g497ff81fa9-goog
>