From: Ian Rogers <irogers@google.com>
To: namhyung@kernel.org
Cc: irogers@google.com, acme@kernel.org, adrian.hunter@intel.com,
ajones@ventanamicro.com, ak@linux.intel.com, alex@ghiti.fr,
alexander.shishkin@linux.intel.com, anup@brainfault.org,
aou@eecs.berkeley.edu, atrajeev@linux.ibm.com,
blakejones@google.com, ctshao@google.com,
dapeng1.mi@linux.intel.com, derek.foreman@collabora.com,
dvyukov@google.com, howardchu95@gmail.com,
hrishikesh123s@gmail.com, james.clark@linaro.org,
jolsa@kernel.org, krzysztof.m.lopatowski@gmail.com,
leo.yan@arm.com, linux-kernel@vger.kernel.org,
linux-perf-users@vger.kernel.org, linux@treblig.org,
mingo@redhat.com, nichen@iscas.ac.cn, palmer@dabbelt.com,
peterz@infradead.org, pjw@kernel.org, ravi.bangoria@amd.com,
swapnil.sapkal@amd.com, tanze@kylinos.cn,
thomas.falcon@intel.com, tianyou.li@intel.com,
yujie.liu@intel.com, zhouquan@iscas.ac.cn
Subject: [PATCH v4 16/25] perf inject: Don't pass evsel with sample
Date: Fri, 20 Mar 2026 12:26:18 -0700 [thread overview]
Message-ID: <20260320192627.368357-17-irogers@google.com> (raw)
In-Reply-To: <20260320192627.368357-1-irogers@google.com>
The sample contains the evsel and so it is unnecessary to pass the
evsel as well. Clean up handling of sample and mmap_evsel when
synthesizing build id events and mmap2 events with build ids. For
callchain walking and things that expect the evsel to match sample,
the sample->evsel shouldn't change. The mmap_evsel should be used when
making mmap2 events.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/builtin-inject.c | 52 ++++++++++++++++--------------
tools/perf/util/synthetic-events.c | 45 ++++++++++++++++++--------
tools/perf/util/synthetic-events.h | 2 --
3 files changed, 59 insertions(+), 40 deletions(-)
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index 0f8789dd2b68..7e0dc0f2dd70 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -146,14 +146,12 @@ struct event_entry {
static int tool__inject_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
- const struct evsel *evsel,
__u16 misc,
const char *filename,
struct dso *dso, u32 flags);
static int tool__inject_mmap2_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
- const struct evsel *evsel,
__u16 misc,
__u32 pid, __u32 tid,
__u64 start, __u64 len, __u64 pgoff,
@@ -357,7 +355,6 @@ perf_inject__cut_auxtrace_sample(struct perf_inject *inject,
typedef int (*inject_handler)(const struct perf_tool *tool,
union perf_event *event,
struct perf_sample *sample,
- struct evsel *evsel,
struct machine *machine);
static int perf_event__repipe_sample(const struct perf_tool *tool,
@@ -370,7 +367,7 @@ static int perf_event__repipe_sample(const struct perf_tool *tool,
if (evsel && evsel->handler) {
inject_handler f = evsel->handler;
- return f(tool, event, sample, evsel, machine);
+ return f(tool, event, sample, machine);
}
build_id__mark_dso_hit(tool, event, sample, machine);
@@ -584,11 +581,12 @@ static int perf_event__repipe_common_mmap(const struct perf_tool *tool,
}
if (dso && !dso__hit(dso)) {
- struct evsel *evsel = evlist__event2evsel(inject->session->evlist, event);
+ if (!sample->evsel)
+ sample->evsel = evlist__event2evsel(inject->session->evlist, event);
- if (evsel) {
+ if (sample->evsel) {
dso__set_hit(dso);
- tool__inject_build_id(tool, sample, machine, evsel,
+ tool__inject_build_id(tool, sample, machine,
/*misc=*/sample->cpumode,
filename, dso, flags);
}
@@ -615,23 +613,26 @@ static int perf_event__repipe_common_mmap(const struct perf_tool *tool,
}
if ((inject->build_id_style == BID_RWS__MMAP2_BUILDID_ALL) &&
!(event->header.misc & PERF_RECORD_MISC_MMAP_BUILD_ID)) {
- struct evsel *evsel = evlist__event2evsel(inject->session->evlist, event);
+ struct evsel *saved_evsel = sample->evsel;
- if (evsel && !dso_sought) {
+ sample->evsel = evlist__event2evsel(inject->session->evlist, event);
+ if (sample->evsel && !dso_sought) {
dso = findnew_dso(pid, tid, filename, dso_id, machine);
dso_sought = true;
}
- if (evsel && dso &&
- !tool__inject_mmap2_build_id(tool, sample, machine, evsel,
+ if (sample->evsel && dso &&
+ !tool__inject_mmap2_build_id(tool, sample, machine,
sample->cpumode | PERF_RECORD_MISC_MMAP_BUILD_ID,
pid, tid, start, len, pgoff,
dso,
prot, flags,
filename)) {
/* Injected mmap2 so no need to repipe. */
+ sample->evsel = saved_evsel;
dso__put(dso);
return 0;
}
+ sample->evsel = saved_evsel;
}
dso__put(dso);
if (inject->build_id_style == BID_RWS__MMAP2_BUILDID_LAZY)
@@ -836,7 +837,6 @@ static bool perf_inject__lookup_known_build_id(struct perf_inject *inject,
static int tool__inject_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
- const struct evsel *evsel,
__u16 misc,
const char *filename,
struct dso *dso, u32 flags)
@@ -860,7 +860,7 @@ static int tool__inject_build_id(const struct perf_tool *tool,
err = perf_event__synthesize_build_id(tool, sample, machine,
perf_event__repipe,
- evsel, misc, dso__bid(dso),
+ misc, dso__bid(dso),
filename);
if (err) {
pr_err("Can't synthesize build_id event for %s\n", filename);
@@ -873,7 +873,6 @@ static int tool__inject_build_id(const struct perf_tool *tool,
static int tool__inject_mmap2_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
- const struct evsel *evsel,
__u16 misc,
__u32 pid, __u32 tid,
__u64 start, __u64 len, __u64 pgoff,
@@ -896,7 +895,6 @@ static int tool__inject_mmap2_build_id(const struct perf_tool *tool,
err = perf_event__synthesize_mmap2_build_id(tool, sample, machine,
perf_event__repipe,
- evsel,
misc, pid, tid,
start, len, pgoff,
dso__bid(dso),
@@ -913,7 +911,7 @@ static int mark_dso_hit(const struct perf_inject *inject,
const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
- const struct evsel *mmap_evsel,
+ struct evsel *mmap_evsel,
struct map *map, bool sample_in_dso)
{
struct dso *dso;
@@ -941,9 +939,13 @@ static int mark_dso_hit(const struct perf_inject *inject,
dso = map__dso(map);
if (inject->build_id_style == BID_RWS__INJECT_HEADER_LAZY) {
if (dso && !dso__hit(dso)) {
+ /*
+ * The sample is just read for identifiers which we want
+ * to match the for the event of the sample.
+ */
dso__set_hit(dso);
tool__inject_build_id(tool, sample, machine,
- mmap_evsel, misc, dso__long_name(dso), dso,
+ misc, dso__long_name(dso), dso,
map__flags(map));
}
} else if (inject->build_id_style == BID_RWS__MMAP2_BUILDID_LAZY) {
@@ -951,11 +953,13 @@ static int mark_dso_hit(const struct perf_inject *inject,
const struct build_id null_bid = { .size = 0 };
const struct build_id *bid = dso ? dso__bid(dso) : &null_bid;
const char *filename = dso ? dso__long_name(dso) : "";
+ struct evsel *saved_evsel = sample->evsel;
map__set_hit(map);
+ /* Creating a new mmap2 event which has an evsel for the mmap event. */
+ sample->evsel = mmap_evsel;
perf_event__synthesize_mmap2_build_id(tool, sample, machine,
perf_event__repipe,
- mmap_evsel,
misc,
sample->pid, sample->tid,
map__start(map),
@@ -965,6 +969,7 @@ static int mark_dso_hit(const struct perf_inject *inject,
map__prot(map),
map__flags(map),
filename);
+ sample->evsel = saved_evsel;
}
}
return 0;
@@ -975,7 +980,7 @@ struct mark_dso_hit_args {
const struct perf_tool *tool;
struct perf_sample *sample;
struct machine *machine;
- const struct evsel *mmap_evsel;
+ struct evsel *mmap_evsel;
};
static int mark_dso_hit_callback(struct callchain_cursor_node *node, void *data)
@@ -1030,7 +1035,6 @@ static int perf_event__inject_buildid(const struct perf_tool *tool, union perf_e
static int perf_inject__sched_process_exit(const struct perf_tool *tool,
union perf_event *event __maybe_unused,
struct perf_sample *sample,
- struct evsel *evsel __maybe_unused,
struct machine *machine __maybe_unused)
{
struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
@@ -1050,13 +1054,12 @@ static int perf_inject__sched_process_exit(const struct perf_tool *tool,
static int perf_inject__sched_switch(const struct perf_tool *tool,
union perf_event *event,
struct perf_sample *sample,
- struct evsel *evsel,
struct machine *machine)
{
struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
struct event_entry *ent;
- perf_inject__sched_process_exit(tool, event, sample, evsel, machine);
+ perf_inject__sched_process_exit(tool, event, sample, machine);
ent = malloc(event->header.size + sizeof(struct event_entry));
if (ent == NULL) {
@@ -1075,13 +1078,13 @@ static int perf_inject__sched_switch(const struct perf_tool *tool,
static int perf_inject__sched_stat(const struct perf_tool *tool,
union perf_event *event __maybe_unused,
struct perf_sample *sample,
- struct evsel *evsel,
struct machine *machine)
{
struct event_entry *ent;
union perf_event *event_sw;
struct perf_sample sample_sw;
struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
+ struct evsel *evsel = sample->evsel;
u32 pid = perf_sample__intval(sample, "pid");
int ret;
@@ -1446,7 +1449,7 @@ static int synthesize_build_id(struct perf_inject *inject, struct dso *dso, pid_
dso__set_hit(dso);
return perf_event__synthesize_build_id(&inject->tool, &synth_sample, machine,
- process_build_id, inject__mmap_evsel(inject),
+ process_build_id,
/*misc=*/synth_sample.cpumode,
dso__bid(dso), dso__long_name(dso));
}
@@ -1989,7 +1992,6 @@ static int evsel__check_stype(struct evsel *evsel, u64 sample_type, const char *
static int drop_sample(const struct perf_tool *tool __maybe_unused,
union perf_event *event __maybe_unused,
struct perf_sample *sample __maybe_unused,
- struct evsel *evsel __maybe_unused,
struct machine *machine __maybe_unused)
{
return 0;
diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c
index ef79433ebc3a..1e6705bcb3e0 100644
--- a/tools/perf/util/synthetic-events.c
+++ b/tools/perf/util/synthetic-events.c
@@ -1797,7 +1797,12 @@ int perf_event__synthesize_sample(union perf_event *event, u64 type, u64 read_fo
return 0;
}
-int perf_event__synthesize_id_sample(__u64 *array, u64 type, const struct perf_sample *sample)
+static int __perf_event__synthesize_id_sample(__u64 *array, u64 type,
+ __u32 pid, __u32 tid,
+ __u64 sample_time,
+ __u64 sample_id,
+ __u64 stream_id,
+ __u32 cpu)
{
__u64 *start = array;
@@ -1808,42 +1813,52 @@ int perf_event__synthesize_id_sample(__u64 *array, u64 type, const struct perf_s
union u64_swap u;
if (type & PERF_SAMPLE_TID) {
- u.val32[0] = sample->pid;
- u.val32[1] = sample->tid;
+ u.val32[0] = pid;
+ u.val32[1] = tid;
*array = u.val64;
array++;
}
if (type & PERF_SAMPLE_TIME) {
- *array = sample->time;
+ *array = sample_time;
array++;
}
if (type & PERF_SAMPLE_ID) {
- *array = sample->id;
+ *array = sample_id;
array++;
}
if (type & PERF_SAMPLE_STREAM_ID) {
- *array = sample->stream_id;
+ *array = stream_id;
array++;
}
if (type & PERF_SAMPLE_CPU) {
- u.val32[0] = sample->cpu;
+ u.val32[0] = cpu;
u.val32[1] = 0;
*array = u.val64;
array++;
}
if (type & PERF_SAMPLE_IDENTIFIER) {
- *array = sample->id;
+ *array = sample_id;
array++;
}
return (void *)array - (void *)start;
}
+int perf_event__synthesize_id_sample(__u64 *array, u64 type, const struct perf_sample *sample)
+{
+ return __perf_event__synthesize_id_sample(array, type,
+ sample->pid, sample->tid,
+ sample->time,
+ sample->id,
+ sample->stream_id,
+ sample->cpu);
+}
+
int __perf_event__synthesize_id_index(const struct perf_tool *tool, perf_event__handler_t process,
struct evlist *evlist, struct machine *machine, size_t from)
{
@@ -2247,7 +2262,6 @@ int perf_event__synthesize_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
perf_event__handler_t process,
- const struct evsel *evsel,
__u16 misc,
const struct build_id *bid,
const char *filename)
@@ -2270,12 +2284,13 @@ int perf_event__synthesize_build_id(const struct perf_tool *tool,
ev.build_id.header.size = len;
strcpy(ev.build_id.filename, filename);
- if (evsel) {
+ if (sample->evsel) {
void *array = &ev;
int ret;
array += ev.header.size;
- ret = perf_event__synthesize_id_sample(array, evsel->core.attr.sample_type, sample);
+ ret = perf_event__synthesize_id_sample(array, sample->evsel->core.attr.sample_type,
+ sample);
if (ret < 0)
return ret;
@@ -2294,7 +2309,6 @@ int perf_event__synthesize_mmap2_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
perf_event__handler_t process,
- const struct evsel *evsel,
__u16 misc,
__u32 pid, __u32 tid,
__u64 start, __u64 len, __u64 pgoff,
@@ -2334,7 +2348,12 @@ int perf_event__synthesize_mmap2_build_id(const struct perf_tool *tool,
array = &ev;
array += ev.header.size;
- ret = perf_event__synthesize_id_sample(array, evsel->core.attr.sample_type, sample);
+ ret = __perf_event__synthesize_id_sample(array, sample->evsel->core.attr.sample_type,
+ pid, tid,
+ sample->time,
+ sample->id,
+ sample->stream_id,
+ sample->cpu);
if (ret < 0)
return ret;
diff --git a/tools/perf/util/synthetic-events.h b/tools/perf/util/synthetic-events.h
index b0edad0c3100..473a43a78993 100644
--- a/tools/perf/util/synthetic-events.h
+++ b/tools/perf/util/synthetic-events.h
@@ -50,7 +50,6 @@ int perf_event__synthesize_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
perf_event__handler_t process,
- const struct evsel *evsel,
__u16 misc,
const struct build_id *bid,
const char *filename);
@@ -58,7 +57,6 @@ int perf_event__synthesize_mmap2_build_id(const struct perf_tool *tool,
struct perf_sample *sample,
struct machine *machine,
perf_event__handler_t process,
- const struct evsel *evsel,
__u16 misc,
__u32 pid, __u32 tid,
__u64 start, __u64 len, __u64 pgoff,
--
2.53.0.959.g497ff81fa9-goog
next prev parent reply other threads:[~2026-03-20 19:28 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-09 17:40 [PATCH v1 00/25] perf tool: Add evsel to perf_sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 01/25] perf sample: Document struct perf_sample Ian Rogers
2026-03-03 3:07 ` Namhyung Kim
2026-03-20 4:41 ` Ian Rogers
2026-02-09 17:40 ` [PATCH v1 02/25] perf sample: Make sure perf_sample__init/exit are used Ian Rogers
2026-03-03 22:38 ` Namhyung Kim
2026-02-09 17:40 ` [PATCH v1 03/25] perf sample: Add evsel to struct perf_sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 04/25] perf tool: Remove evsel from tool APIs that pass the sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 05/25] perf kvm: Don't pass evsel with sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 06/25] perf evsel: Refactor evsel__intval to perf_sample__intval Ian Rogers
2026-02-09 17:40 ` [PATCH v1 07/25] perf trace: Don't pass evsel with sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 08/25] perf callchain: Don't pass evsel and sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 09/25] perf lock: Only pass sample to handlers Ian Rogers
2026-02-09 17:40 ` [PATCH v1 10/25] perf lock: Constify trace_lock_handler variables Ian Rogers
2026-02-09 17:40 ` [PATCH v1 11/25] perf hist: Remove evsel parameter from inc samples functions Ian Rogers
2026-02-09 17:40 ` [PATCH v1 12/25] perf db-export: Remove evsel from struct export_sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 13/25] perf hist: Remove evsel from struct hist_entry_iter Ian Rogers
2026-02-09 17:40 ` [PATCH v1 14/25] perf report: Directly use sample->evsel to avoid computing from sample->id Ian Rogers
2026-02-09 17:40 ` [PATCH v1 15/25] perf annotate: Don't pass evsel to add_sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 16/25] perf inject: Don't pass evsel with sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 17/25] perf kmem: " Ian Rogers
2026-02-09 17:40 ` [PATCH v1 18/25] perf kwork: " Ian Rogers
2026-02-09 17:40 ` [PATCH v1 19/25] perf sched: " Ian Rogers
2026-02-09 17:40 ` [PATCH v1 20/25] perf timechart: " Ian Rogers
2026-02-09 17:40 ` [PATCH v1 21/25] perf trace: " Ian Rogers
2026-02-09 17:40 ` [PATCH v1 22/25] perf evlist: Try to avoid computing evsel from sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 23/25] perf script: Don't pass evsel with sample Ian Rogers
2026-02-09 17:40 ` [PATCH v1 24/25] perf s390-sample-raw: " Ian Rogers
2026-02-09 17:40 ` [PATCH v1 25/25] perf evsel: " Ian Rogers
2026-02-23 19:15 ` [PATCH v1 00/25] perf tool: Add evsel to perf_sample Ian Rogers
2026-03-02 17:56 ` Ian Rogers
2026-03-03 1:15 ` Namhyung Kim
2026-03-04 1:02 ` Namhyung Kim
2026-03-04 16:19 ` Ian Rogers
2026-03-19 23:23 ` [PATCH v2 " Ian Rogers
2026-03-19 23:23 ` [PATCH v2 01/25] perf sample: Document struct perf_sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 02/25] perf sample: Make sure perf_sample__init/exit are used Ian Rogers
2026-03-19 23:23 ` [PATCH v2 03/25] perf sample: Add evsel to struct perf_sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 04/25] perf tool: Remove evsel from tool APIs that pass the sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 05/25] perf kvm: Don't pass evsel with sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 06/25] perf evsel: Refactor evsel__intval to perf_sample__intval Ian Rogers
2026-03-19 23:23 ` [PATCH v2 07/25] perf trace: Don't pass evsel with sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 08/25] perf callchain: Don't pass evsel and sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 09/25] perf lock: Only pass sample to handlers Ian Rogers
2026-03-19 23:23 ` [PATCH v2 10/25] perf lock: Constify trace_lock_handler variables Ian Rogers
2026-03-19 23:23 ` [PATCH v2 11/25] perf hist: Remove evsel parameter from inc samples functions Ian Rogers
2026-03-19 23:23 ` [PATCH v2 12/25] perf db-export: Remove evsel from struct export_sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 13/25] perf hist: Remove evsel from struct hist_entry_iter Ian Rogers
2026-03-19 23:23 ` [PATCH v2 14/25] perf report: Directly use sample->evsel to avoid computing from sample->id Ian Rogers
2026-03-19 23:23 ` [PATCH v2 15/25] perf annotate: Don't pass evsel to add_sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 16/25] perf inject: Don't pass evsel with sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 17/25] perf kmem: " Ian Rogers
2026-03-19 23:23 ` [PATCH v2 18/25] perf kwork: " Ian Rogers
2026-03-19 23:23 ` [PATCH v2 19/25] perf sched: " Ian Rogers
2026-03-19 23:23 ` [PATCH v2 20/25] perf timechart: " Ian Rogers
2026-03-19 23:23 ` [PATCH v2 21/25] perf trace: " Ian Rogers
2026-03-19 23:23 ` [PATCH v2 22/25] perf evlist: Try to avoid computing evsel from sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 23/25] perf script: Don't pass evsel with sample Ian Rogers
2026-03-19 23:23 ` [PATCH v2 24/25] perf s390-sample-raw: " Ian Rogers
2026-03-19 23:23 ` [PATCH v2 25/25] perf evsel: " Ian Rogers
2026-03-20 8:08 ` [PATCH v3 00/25] perf tool: Add evsel to perf_sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 01/25] perf sample: Document struct perf_sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 02/25] perf sample: Make sure perf_sample__init/exit are used Ian Rogers
2026-03-20 8:08 ` [PATCH v3 03/25] perf sample: Add evsel to struct perf_sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 04/25] perf tool: Remove evsel from tool APIs that pass the sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 05/25] perf kvm: Don't pass evsel with sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 06/25] perf evsel: Refactor evsel__intval to perf_sample__intval Ian Rogers
2026-03-20 8:08 ` [PATCH v3 07/25] perf trace: Don't pass evsel with sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 08/25] perf callchain: Don't pass evsel and sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 09/25] perf lock: Only pass sample to handlers Ian Rogers
2026-03-20 8:08 ` [PATCH v3 10/25] perf lock: Constify trace_lock_handler variables Ian Rogers
2026-03-20 8:08 ` [PATCH v3 11/25] perf hist: Remove evsel parameter from inc samples functions Ian Rogers
2026-03-20 8:08 ` [PATCH v3 12/25] perf db-export: Remove evsel from struct export_sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 13/25] perf hist: Remove evsel from struct hist_entry_iter Ian Rogers
2026-03-20 8:08 ` [PATCH v3 14/25] perf report: Directly use sample->evsel to avoid computing from sample->id Ian Rogers
2026-03-20 8:08 ` [PATCH v3 15/25] perf annotate: Don't pass evsel to add_sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 16/25] perf inject: Don't pass evsel with sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 17/25] perf kmem: " Ian Rogers
2026-03-20 8:08 ` [PATCH v3 18/25] perf kwork: " Ian Rogers
2026-03-20 8:08 ` [PATCH v3 19/25] perf sched: " Ian Rogers
2026-03-20 8:08 ` [PATCH v3 20/25] perf timechart: " Ian Rogers
2026-03-20 8:08 ` [PATCH v3 21/25] perf trace: " Ian Rogers
2026-03-20 8:08 ` [PATCH v3 22/25] perf evlist: Try to avoid computing evsel from sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 23/25] perf script: Don't pass evsel with sample Ian Rogers
2026-03-20 8:08 ` [PATCH v3 24/25] perf s390-sample-raw: " Ian Rogers
2026-03-20 8:08 ` [PATCH v3 25/25] perf evsel: " Ian Rogers
2026-03-20 19:26 ` [PATCH v4 00/25] perf tool: Add evsel to perf_sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 01/25] perf sample: Document struct perf_sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 02/25] perf sample: Make sure perf_sample__init/exit are used Ian Rogers
2026-03-20 19:26 ` [PATCH v4 03/25] perf sample: Add evsel to struct perf_sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 04/25] perf tool: Remove evsel from tool APIs that pass the sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 05/25] perf kvm: Don't pass evsel with sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 06/25] perf evsel: Refactor evsel__intval to perf_sample__intval Ian Rogers
2026-03-20 19:26 ` [PATCH v4 07/25] perf trace: Don't pass evsel with sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 08/25] perf callchain: Don't pass evsel and sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 09/25] perf lock: Only pass sample to handlers Ian Rogers
2026-03-20 19:26 ` [PATCH v4 10/25] perf lock: Constify trace_lock_handler variables Ian Rogers
2026-03-20 19:26 ` [PATCH v4 11/25] perf hist: Remove evsel parameter from inc samples functions Ian Rogers
2026-03-20 19:26 ` [PATCH v4 12/25] perf db-export: Remove evsel from struct export_sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 13/25] perf hist: Remove evsel from struct hist_entry_iter Ian Rogers
2026-03-20 19:26 ` [PATCH v4 14/25] perf report: Directly use sample->evsel to avoid computing from sample->id Ian Rogers
2026-03-20 19:26 ` [PATCH v4 15/25] perf annotate: Don't pass evsel to add_sample Ian Rogers
2026-03-20 19:26 ` Ian Rogers [this message]
2026-03-20 19:26 ` [PATCH v4 17/25] perf kmem: Don't pass evsel with sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 18/25] perf kwork: " Ian Rogers
2026-03-20 19:26 ` [PATCH v4 19/25] perf sched: " Ian Rogers
2026-03-20 19:26 ` [PATCH v4 20/25] perf timechart: " Ian Rogers
2026-03-20 19:26 ` [PATCH v4 21/25] perf trace: " Ian Rogers
2026-03-20 19:26 ` [PATCH v4 22/25] perf evlist: Try to avoid computing evsel from sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 23/25] perf script: Don't pass evsel with sample Ian Rogers
2026-03-20 19:26 ` [PATCH v4 24/25] perf s390-sample-raw: Don't pass evsel or its PMU " Ian Rogers
2026-03-20 19:26 ` [PATCH v4 25/25] perf evsel: Don't pass evsel " Ian Rogers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260320192627.368357-17-irogers@google.com \
--to=irogers@google.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ajones@ventanamicro.com \
--cc=ak@linux.intel.com \
--cc=alex@ghiti.fr \
--cc=alexander.shishkin@linux.intel.com \
--cc=anup@brainfault.org \
--cc=aou@eecs.berkeley.edu \
--cc=atrajeev@linux.ibm.com \
--cc=blakejones@google.com \
--cc=ctshao@google.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=derek.foreman@collabora.com \
--cc=dvyukov@google.com \
--cc=howardchu95@gmail.com \
--cc=hrishikesh123s@gmail.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=krzysztof.m.lopatowski@gmail.com \
--cc=leo.yan@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux@treblig.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=nichen@iscas.ac.cn \
--cc=palmer@dabbelt.com \
--cc=peterz@infradead.org \
--cc=pjw@kernel.org \
--cc=ravi.bangoria@amd.com \
--cc=swapnil.sapkal@amd.com \
--cc=tanze@kylinos.cn \
--cc=thomas.falcon@intel.com \
--cc=tianyou.li@intel.com \
--cc=yujie.liu@intel.com \
--cc=zhouquan@iscas.ac.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox