From: Samuel Wu <wusamuel@google.com>
To: Lalit Maganti <lalitmaganti@gmail.com>
Cc: irogers@google.com, acme@kernel.org, namhyung@kernel.org,
james.clark@linaro.org, adrian.hunter@intel.com,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] perf python: Accept events larger than union perf_event
Date: Mon, 9 Nov 2026 09:58:40 -0800 [thread overview]
Message-ID: <CAG2KctqPvou3A_EGiov9yZJrCWMmoEX-k4-Or-RGj_Cxdtc7Fg@mail.gmail.com> (raw)
In-Reply-To: <20261018074528.974953-1-lalitmaganti@gmail.com>
On Sun, Oct 18, 2026 at 12:45 AM Lalit Maganti <lalitmaganti@gmail.com> wrote:
>
> 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
>
Reviewed-by: Samuel Wu <wusamuel@google.com>
next prev parent reply other threads:[~2026-11-09 17:58 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-18 7:45 Lalit Maganti
2026-11-09 17:58 ` Samuel Wu [this message]
2026-11-09 18:27 ` Ian Rogers
2026-11-09 20:02 ` Arnaldo Melo
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=CAG2KctqPvou3A_EGiov9yZJrCWMmoEX-k4-Or-RGj_Cxdtc7Fg@mail.gmail.com \
--to=wusamuel@google.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=lalitmaganti@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=namhyung@kernel.org \
/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
all inboxes | Powered by JetHome®