Re: [PATCH] perf tool: Round mmap pages to power 2

From: David Ahern
Date: Fri Nov 08 2013 - 09:41:35 EST


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 <dsahern@xxxxxxxxx>
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 <adrian.hunter@xxxxxxxxx>
Signed-off-by: David Ahern <dsahern@xxxxxxxxx>
Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
---
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)