Commit-ID:  94b4d89e0021fe3e10415feede364a3fccaa2f89
Gitweb:     http://git.kernel.org/tip/94b4d89e0021fe3e10415feede364a3fccaa2f89
Author:     Namhyung Kim <[email protected]>
AuthorDate: Tue, 4 Jun 2013 14:20:26 +0900
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Fri, 12 Jul 2013 13:52:24 -0300

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 <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Steven Rostedt <[email protected]>
Link: 
http://lkml.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
 tools/perf/util/trace-event-read.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/trace-event-read.c 
b/tools/perf/util/trace-event-read.c
index fa45fca..f211227 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)
 static int read_header_files(struct pevent *pevent)
 {
        unsigned long long size;
+       char *header_page;
        char buf[BUFSIZ];
        int ret = 0;
 
@@ -224,7 +225,26 @@ static int read_header_files(struct pevent *pevent)
        }
 
        size = read8(pevent);
-       skip(size);
+
+       header_page = malloc(size);
+       if (header_page == NULL)
+               return -1;
+
+       if (do_read(header_page, size) < 0) {
+               pr_debug("did not read header page");
+               free(header_page);
+               return -1;
+       }
+
+       if (!pevent_parse_header_page(pevent, header_page, size,
+                                     pevent_get_long_size(pevent))) {
+               /*
+                * The commit field in the page is of type long,
+                * use that instead, since it represents the kernel.
+                */
+               pevent_set_long_size(pevent, pevent->header_page_size_size);
+       }
+       free(header_page);
 
        if (do_read(buf, 13) < 0)
                return -1;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to