Skip to content

Commit

Permalink
perf tools: Start the perf.data mapping at data offset in perf trace
Browse files Browse the repository at this point in the history
Currently, we are mapping perf.data in the beginning of the file
and use the data offset as a buffer offset.

This may exceed the mapping area if the data offset is upper than
page_size * mmap_window and result in a page fault (thing that
happen if we merge trace.info in perf.data).

Instead, let's start the mapping in the page that matches our data
offset.

v2: Drop a junk from another patch (trace_report() removal)

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Tom Zanussi <tzanussi@gmail.com>
LKML-Reference: <1254856886-10348-1-git-send-email-fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Frederic Weisbecker authored and Ingo Molnar committed Oct 7, 2009
1 parent 42e59d7 commit b209aa1
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion tools/perf/builtin-trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ static int __cmd_trace(void)
int ret, rc = EXIT_FAILURE;
unsigned long offset = 0;
unsigned long head = 0;
unsigned long shift;
struct stat perf_stat;
event_t *event;
uint32_t size;
Expand Down Expand Up @@ -180,6 +181,10 @@ static int __cmd_trace(void)
return EXIT_FAILURE;
}

shift = page_size * (head / page_size);
offset += shift;
head -= shift;

remap:
buf = (char *)mmap(NULL, page_size * mmap_window, PROT_READ,
MAP_SHARED, input, offset);
Expand All @@ -192,9 +197,9 @@ static int __cmd_trace(void)
event = (event_t *)(buf + head);

if (head + event->header.size >= page_size * mmap_window) {
unsigned long shift = page_size * (head / page_size);
int res;

shift = page_size * (head / page_size);
res = munmap(buf, page_size * mmap_window);
assert(res == 0);

Expand Down

0 comments on commit b209aa1

Please sign in to comment.