aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/trace-event-read.c
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung.kim@lge.com>2013-06-04 01:20:26 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-07-12 12:52:24 -0400
commit94b4d89e0021fe3e10415feede364a3fccaa2f89 (patch)
treee4dcb6398b63fe961c3451d4e290d85f7551a72c /tools/perf/util/trace-event-read.c
parent2b2efc7fb8a3ede936580e870c5f809e491c925c (diff)
perf util: Parse header_page to get proper long size
The header_page file describes the format of the ring buffer page which is used by ftrace (not perf). And size of "commit" field (I guess it's older name was 'size') represents the real size of long type used for kernel. So update the pevent's long size. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/1370323231-14022-12-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/trace-event-read.c')
-rw-r--r--tools/perf/util/trace-event-read.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/tools/perf/util/trace-event-read.c b/tools/perf/util/trace-event-read.c
index fa45fca2a2d3..f2112270c663 100644
--- a/tools/perf/util/trace-event-read.c
+++ b/tools/perf/util/trace-event-read.c
@@ -212,6 +212,7 @@ static int read_ftrace_printk(struct pevent *pevent)
212static int read_header_files(struct pevent *pevent) 212static int read_header_files(struct pevent *pevent)
213{ 213{
214 unsigned long long size; 214 unsigned long long size;
215 char *header_page;
215 char buf[BUFSIZ]; 216 char buf[BUFSIZ];
216 int ret = 0; 217 int ret = 0;
217 218
@@ -224,7 +225,26 @@ static int read_header_files(struct pevent *pevent)
224 } 225 }
225 226
226 size = read8(pevent); 227 size = read8(pevent);
227 skip(size); 228
229 header_page = malloc(size);
230 if (header_page == NULL)
231 return -1;
232
233 if (do_read(header_page, size) < 0) {
234 pr_debug("did not read header page");
235 free(header_page);
236 return -1;
237 }
238
239 if (!pevent_parse_header_page(pevent, header_page, size,
240 pevent_get_long_size(pevent))) {
241 /*
242 * The commit field in the page is of type long,
243 * use that instead, since it represents the kernel.
244 */
245 pevent_set_long_size(pevent, pevent->header_page_size_size);
246 }
247 free(header_page);
228 248
229 if (do_read(buf, 13) < 0) 249 if (do_read(buf, 13) < 0)
230 return -1; 250 return -1;