perf report: Output non-zero offset for decompressed records
authorAlexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
Wed, 29 Sep 2021 09:14:45 +0000 (12:14 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 14 Oct 2021 18:41:35 +0000 (15:41 -0300)
Print offset of PERF_RECORD_COMPRESSED record instead of zero for
decompressed records in raw trace dump (-D option of perf-report):

  0x17cf08 [0x28]: event: 9

instead of:

  0 [0x28]: event: 9

The fix is not critical, because currently file_pos for compressed
events is used in perf_session__process_event only to show offsets
in the raw dump.

This patch was separated from patchset:

https://lore.kernel.org/lkml/cover.1629186429.git.alexey.v.bayduraev@linux.intel.com/

and was already rewieved.

Reviewed-by: Riccardo Mancini <rickyman7@gmail.com>
Signed-off-by: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
Tested-by: Riccardo Mancini <rickyman7@gmail.com>
Acked-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Antonov <alexander.antonov@linux.intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexei Budankov <abudankov@huawei.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20210929091445.18274-1-alexey.v.bayduraev@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/session.c

index 069c2cf..352f160 100644 (file)
@@ -2116,7 +2116,7 @@ fetch_decomp_event(u64 head, size_t mmap_size, char *buf, bool needs_swap)
 static int __perf_session__process_decomp_events(struct perf_session *session)
 {
        s64 skip;
-       u64 size, file_pos = 0;
+       u64 size;
        struct decomp *decomp = session->decomp_last;
 
        if (!decomp)
@@ -2132,7 +2132,7 @@ static int __perf_session__process_decomp_events(struct perf_session *session)
                size = event->header.size;
 
                if (size < sizeof(struct perf_event_header) ||
-                   (skip = perf_session__process_event(session, event, file_pos)) < 0) {
+                   (skip = perf_session__process_event(session, event, decomp->file_pos)) < 0) {
                        pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
                                decomp->file_pos + decomp->head, event->header.size, event->header.type);
                        return -EINVAL;