Re: [PATCH v1 3/5] perf session: Extra logging for failed to process events

From: Namhyung Kim

Date: Thu Feb 26 2026 - 01:46:41 EST


On Wed, Feb 25, 2026 at 05:35:32PM -0800, Ian Rogers wrote:
> Print log information in ordered event processing so that the cause of
> finished round failing is clearer. Print the event name along with its
> number when an event isn't processed. Add extra detail about where the
> failure happened.

It'd be nice if you show messages before and after the change.

>
> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> ---
> tools/perf/util/session.c | 28 ++++++++++++++++++++--------
> 1 file changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index 4b465abfa36c..7f3ffbe633af 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -131,10 +131,17 @@ static int ordered_events__deliver_event(struct ordered_events *oe,
> {
> struct perf_session *session = container_of(oe, struct perf_session,
> ordered_events);
> + int ret = perf_session__deliver_event(session, event->event,

Slightly unaligned.. it seems to have 2 spaces.

Thanks,
Namhyung


> + session->tool, event->file_offset,
> + event->file_path);
>
> - return perf_session__deliver_event(session, event->event,
> - session->tool, event->file_offset,
> - event->file_path);
> + if (ret) {
> + pr_err("%#" PRIx64 " [%#x]: ordered event processing failed (%d) for event of type: %s (%d)\n",
> + event->file_offset, event->event->header.size, ret,
> + perf_event__name(event->event->header.type),
> + event->event->header.type);
> + }
> + return ret;
> }
>
> struct perf_session *__perf_session__new(struct perf_data *data,
> @@ -2110,8 +2117,10 @@ static int __perf_session__process_pipe_events(struct perf_session *session)
> }
>
> if ((skip = perf_session__process_event(session, event, head, "pipe")) < 0) {
> - pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
> - head, event->header.size, event->header.type);
> + pr_err("%#" PRIx64 " [%#x]: piped event processing failed for event of type: %s (%d)\n",
> + head, event->header.size,
> + perf_event__name(event->header.type),
> + event->header.type);
> err = -EINVAL;
> goto out_err;
> }
> @@ -2225,8 +2234,10 @@ static int __perf_session__process_decomp_events(struct perf_session *session)
> if (size < sizeof(struct perf_event_header) ||
> (skip = perf_session__process_event(session, event, decomp->file_pos,
> decomp->file_path)) < 0) {
> - pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
> - decomp->file_pos + decomp->head, event->header.size, event->header.type);
> + pr_err("%#" PRIx64 " [%#x]: decompress event processing failed for event of type: %s (%d)\n",
> + decomp->file_pos + decomp->head, event->header.size,
> + perf_event__name(event->header.type),
> + event->header.type);
> return -EINVAL;
> }
>
> @@ -2382,8 +2393,9 @@ reader__read_event(struct reader *rd, struct perf_session *session,
> if (size < sizeof(struct perf_event_header) ||
> (skip = rd->process(session, event, rd->file_pos, rd->path)) < 0) {
> errno = -skip;
> - pr_err("%#" PRIx64 " [%#x]: failed to process type: %d [%m]\n",
> + pr_err("%#" PRIx64 " [%#x]: processing failed for event of type: %s (%d) [%m]\n",
> rd->file_offset + rd->head, event->header.size,
> + perf_event__name(event->header.type),
> event->header.type);
> err = skip;
> goto out;
> --
> 2.53.0.414.gf7e9f6c205-goog
>