aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/trace-event-read.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2010-04-30 21:08:46 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2010-04-30 22:31:48 -0400
commitd00a47cce569a3e660a8c9de5d57af28d6a9f0f7 (patch)
tree0993bc6584d8726a7a921f9a13ce11f7c560cdb0 /tools/perf/util/trace-event-read.c
parente5a5f1f015cf435eb3d2f5712ba51ffdbb92cbef (diff)
perf: Fix warning while reading ring buffer headers
commit e9e94e3bd862d31777335722e747e97d9821bc1d "perf trace: Ignore "overwrite" field if present in /events/header_page" makes perf trace launching spurious warnings about unexpected tokens read: Warning: Error: expected type 6 but read 4 This change tries to handle the overcommit field in the header_page file whenever this field is present or not. The problem is that if this field is not present, we try to find it and give up in the middle of the line when we realize we are actually dealing with another field, which is the "data" one. And this failure abandons the file pointer in the middle of the "data" description line: field: u64 timestamp; offset:0; size:8; signed:0; field: local_t commit; offset:8; size:8; signed:1; field: char data; offset:16; size:4080; signed:1; ^^^ Here What happens next is that we want to read this line to parse the data field, but we fail because the pointer is not in the beginning of the line. We could probably fix that by rewinding the pointer. But in fact we don't care much about these headers that only concern the ftrace ring-buffer. We don't use them from perf. Just skip this part of perf.data, but don't remove it from recording to stay compatible with olders perf.data Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Stephane Eranian <eranian@google.com> Cc: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'tools/perf/util/trace-event-read.c')
-rw-r--r--tools/perf/util/trace-event-read.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/tools/perf/util/trace-event-read.c b/tools/perf/util/trace-event-read.c
index 44889c9b5630..46066391288a 100644
--- a/tools/perf/util/trace-event-read.c
+++ b/tools/perf/util/trace-event-read.c
@@ -52,6 +52,12 @@ static unsigned long page_size;
52 52
53static ssize_t calc_data_size; 53static ssize_t calc_data_size;
54 54
55/* If it fails, the next read will report it */
56static void skip(int size)
57{
58 lseek(input_fd, size, SEEK_CUR);
59}
60
55static int do_read(int fd, void *buf, int size) 61static int do_read(int fd, void *buf, int size)
56{ 62{
57 int rsize = size; 63 int rsize = size;
@@ -169,7 +175,6 @@ static void read_ftrace_printk(void)
169static void read_header_files(void) 175static void read_header_files(void)
170{ 176{
171 unsigned long long size; 177 unsigned long long size;
172 char *header_page;
173 char *header_event; 178 char *header_event;
174 char buf[BUFSIZ]; 179 char buf[BUFSIZ];
175 180
@@ -179,10 +184,7 @@ static void read_header_files(void)
179 die("did not read header page"); 184 die("did not read header page");
180 185
181 size = read8(); 186 size = read8();
182 header_page = malloc_or_die(size); 187 skip(size);
183 read_or_die(header_page, size);
184 parse_header_page(header_page, size);
185 free(header_page);
186 188
187 /* 189 /*
188 * The size field in the page is of type long, 190 * The size field in the page is of type long,