* [PATCH] perf python: Accept events larger than union perf_event
@ 2026-10-18 7:45 Lalit Maganti
2026-10-18 7:48 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: Lalit Maganti @ 2026-10-18 7:45 UTC (permalink / raw)
To: irogers, acme, namhyung
Cc: james.clark, adrian.hunter, linux-perf-users, linux-kernel,
Lalit Maganti
Samples recorded with --call-graph dwarf carry a copy of the user stack
and are larger than union perf_event, so session.process_events()
fails on the first one:
$ perf record --call-graph dwarf -- ./workload
$ python3 tools/perf/python/stackcollapse.py
...
TypeError: Unexpected event size: 4168 < 8424
This makes all the standalone scripts unusable on such recordings.
pyrf_event__new() rejects events larger than union perf_event, which
guarded the copy into the union that pyrf_event used to embed. Since
commit 2c672ffdad4b ("perf python: Lazily copy events and samples from
process_events") the event is borrowed, or copied to a buffer of
header.size bytes when a callback keeps it, so nothing depends on the
event fitting in the union any more. Remove the check.
With this, stackcollapse.py and flamegraph.py process a DWARF recording
of a two-thread workload, with the same per-symbol sample counts as
perf script, also when the callback keeps the events after returning.
Assisted-by: LLM
Signed-off-by: Lalit Maganti <lalitmaganti@gmail.com>
---
tools/perf/util/python.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
index 60dbe2dad5eb..8b4b2f3d0926 100644
--- a/tools/perf/util/python.c
+++ b/tools/perf/util/python.c
@@ -1792,11 +1792,6 @@ static PyObject *pyrf_event__new(const union perf_event *event, struct evsel *ev
event->header.size, event->header.type);
}
- if (event->header.size > sizeof(union perf_event)) {
- return PyErr_Format(PyExc_TypeError, "Unexpected event size: %zu < %u",
- sizeof(union perf_event), event->header.size);
- }
-
pevent = PyObject_New(struct pyrf_event, pyrf_event__type[event->header.type]);
if (pevent == NULL)
return PyErr_NoMemory();
base-commit: 1c90f0a3c8a1c4e38f9edd97af9e20848805a7fb
--
2.56.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] perf python: Accept events larger than union perf_event
2026-10-18 7:45 [PATCH] perf python: Accept events larger than union perf_event Lalit Maganti
@ 2026-10-18 7:48 ` sashiko-bot
0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-10-18 7:48 UTC (permalink / raw)
To: Lalit Maganti; +Cc: linux-perf-users
> Samples recorded with --call-graph dwarf carry a copy of the user stack
> and are larger than union perf_event, so session.process_events()
> fails on the first one:
>
> $ perf record --call-graph dwarf -- ./workload
> $ python3 tools/perf/python/stackcollapse.py
> ...
> TypeError: Unexpected event size: 4168 < 8424
>
> This makes all the standalone scripts unusable on such recordings.
>
> pyrf_event__new() rejects events larger than union perf_event, which
> guarded the copy into the union that pyrf_event used to embed. Since
> commit 2c672ffdad4b ("perf python: Lazily copy events and samples from
> process_events") the event is borrowed, or copied to a buffer of
> header.size bytes when a callback keeps it, so nothing depends on the
> event fitting in the union any more. Remove the check.
>
> With this, stackcollapse.py and flamegraph.py process a DWARF recording
> of a two-thread workload, with the same per-symbol sample counts as
> perf script, also when the callback keeps the events after returning.
>
> Assisted-by: LLM
> Signed-off-by: Lalit Maganti <lalitmaganti@gmail.com>
Sashiko has reviewed this patch and found no issues.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261018074528.974953-1-lalitmaganti@gmail.com?part=1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-18 7:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-18 7:45 [PATCH] perf python: Accept events larger than union perf_event Lalit Maganti
2026-10-18 7:48 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox