]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf session: Extra logging for failed to process events
authorIan Rogers <irogers@google.com>
Wed, 1 Apr 2026 16:13:20 +0000 (09:13 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Fri, 3 Apr 2026 02:35:16 +0000 (19:35 -0700)
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.

The following log lines come from running `perf data convert`. Before:
  0xa250 [0x10]: failed to process type: 80

After:
  0xa250 [0x10]: piped event processing failed for event of type: FEATURE (80)

Signed-off-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/session.c

index 09de5288f9e15bb0ce07efbee815e22e503e3081..3a911c70cd0ef7ab14b610ced032cfe9b85a588b 100644 (file)
@@ -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,
+                                              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 @@ more:
        }
 
        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;