perf session: Avoid calling lseek(2) for pipe
authorNamhyung Kim <namhyung@kernel.org>
Tue, 31 Jan 2023 02:33:49 +0000 (18:33 -0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 2 Feb 2023 00:31:04 +0000 (21:31 -0300)
We should not call lseek(2) for pipes as it won't work.  And we already
in the proper place to read the data for AUXTRACE.  Add the comment like
in the PERF_RECORD_HEADER_TRACING_DATA.

Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: James Clark <james.clark@arm.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: https://lore.kernel.org/r/20230131023350.1903992-4-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/session.c

index 7c021c6..fdfe772 100644 (file)
@@ -1699,8 +1699,13 @@ static s64 perf_session__process_user_event(struct perf_session *session,
        case PERF_RECORD_AUXTRACE_INFO:
                return tool->auxtrace_info(session, event);
        case PERF_RECORD_AUXTRACE:
-               /* setup for reading amidst mmap */
-               lseek(fd, file_offset + event->header.size, SEEK_SET);
+               /*
+                * Setup for reading amidst mmap, but only when we
+                * are in 'file' mode.  The 'pipe' fd is in proper
+                * place already.
+                */
+               if (!perf_data__is_pipe(session->data))
+                       lseek(fd, file_offset + event->header.size, SEEK_SET);
                return tool->auxtrace(session, event);
        case PERF_RECORD_AUXTRACE_ERROR:
                perf_session__auxtrace_error_inc(session, event);