| The patch is modified to resolve the conflicts of renamed |
| evsel->attr.size which became evsel->core.attr.size in ToT. |
| |
| From 648b054a4647cd62e13ba79f398b8b97a7c82b19 Mon Sep 17 00:00:00 2001 |
| From: Al Grant <al.grant@arm.com> |
| Date: Tue, 24 Nov 2020 19:58:17 +0000 |
| Subject: [PATCH] perf inject: Correct event attribute sizes |
| |
| When 'perf inject' reads a perf.data file from an older version of perf, |
| it writes event attributes into the output with the original size field, |
| but lays them out as if they had the size currently used. Readers see a |
| corrupt file. Update the size field to match the layout. |
| |
| Signed-off-by: Al Grant <al.grant@foss.arm.com> |
| Acked-by: Jiri Olsa <jolsa@redhat.com> |
| Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Link: http://lore.kernel.org/lkml/20201124195818.30603-1-al.grant@arm.com |
| Signed-off-by: Denis Nikitin <denik@chromium.org> |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| --- |
| tools/perf/util/header.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c |
| index 062383e225a3..c4ed3dc2c8f4 100644 |
| --- a/tools/perf/util/header.c |
| +++ b/tools/perf/util/header.c |
| @@ -3323,6 +3323,14 @@ int perf_session__write_header(struct perf_session *session, |
| attr_offset = lseek(ff.fd, 0, SEEK_CUR); |
| |
| evlist__for_each_entry(evlist, evsel) { |
| + if (evsel->attr.size < sizeof(evsel->attr)) { |
| + /* |
| + * We are likely in "perf inject" and have read |
| + * from an older file. Update attr size so that |
| + * reader gets the right offset to the ids. |
| + */ |
| + evsel->attr.size = sizeof(evsel->attr); |
| + } |
| f_attr = (struct perf_file_attr){ |
| .attr = evsel->core.attr, |
| .ids = { |
| -- |
| 2.30.0.478.g8a0d178c01-goog |
| |