On 11/8/13, 2:11 AM, Adrian Hunter wrote:
This prevents:
--out-pages=0
from working e.g.
tools/perf/perf record -vv --out-pages=0 uname
rounding mmap pages size to 4096 (1 pages)
Although without this patch:
tools/perf/perf record -vv --out-pages=0 uname
--mmap_pages/-m value must be a power of two.
usage: perf record [<options>] [<command>]
or: perf record [<options>] -- <command> [<options>]
--out-pages <pages>
Number of pages or size with units to use for
output (default 64M)
Also there is:
tools/perf/perf record -vv --no-out-pages uname
Segmentation fault (core dumped)
This is problem with perf_evlist__parse_mmap_pages(); same thing happens
with --no-map-pages.
With the attached both round a 0 up to 1 page:
[daahern@nxos-vdc-dev3 perf]$ perf record --out-pages 0 uname
rounding mmap pages size to 4096 (1 pages)
Linux
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.008 MB perf.data (~339 samples) ]
[daahern@nxos-vdc-dev3 perf]$ perf record --mmap-pages 0 uname
rounding mmap pages size to 4096 (1 pages)
Linux
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.008 MB perf.data (~339 samples) ]
[daahern@nxos-vdc-dev3 perf]$ perf record --no-mmap-pages uname
usage: perf record [<options>] [<command>]
or: perf record [<options>] -- <command> [<options>]
-m, --mmap-pages <pages>
number of mmap data pages
David
>From fc7c5a6b2b47a2e7a04613b4e82e478a0dcabf42 Mon Sep 17 00:00:00 2001
From: David Ahern <[email protected]>
Date: Fri, 8 Nov 2013 07:37:43 -0700
Subject: [PATCH] perf record: Fix segfault with --no-mmap-pages
Adrian reported a segfault when using --no-out-pages
$ tools/perf/perf record -vv --no-out-pages uname
Segmentation fault (core dumped)
The same occurs with --no-mmap-pages. Fix by checking that str is non-NULL
before parsing it.
Reported-by: Adrian Hunter <[email protected]>
Signed-off-by: David Ahern <[email protected]>
Cc: Adrian Hunter <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Jiri Olsa <[email protected]>
---
tools/perf/util/evlist.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 9ec3a5a45f22..1f103616d906 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -718,6 +718,9 @@ int perf_evlist__parse_mmap_pages(const struct option *opt,
const char *str,
{ .tag = 0 },
};
+ if (str == NULL)
+ return -1;
+
val = parse_tag_value(str, tags);
if (val != (unsigned long) -1) {
/* we got file size value */
--
1.8.3.4 (Apple Git-47)