public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch] perf tools: perf list broken on ARM
@ 2013-12-30 20:39 Vince Weaver
  2014-01-08 21:30 ` Vince Weaver
  2014-02-22 17:55 ` [tip:perf/core] perf list: Fix checking for supported events on older kernels tip-bot for Vince Weaver
  0 siblings, 2 replies; 10+ messages in thread
From: Vince Weaver @ 2013-12-30 20:39 UTC (permalink / raw)
  To: linux-kernel
  Cc: Namhyung Kim, Chad Paradis, Peter Zijlstra, Paul Mackerras,
	Ingo Molnar, Arnaldo Carvalho de Melo


"perf list" listing of hardware events doesn't work on older ARM devices.
The change enabling event detection:

 commit b41f1cec91c37eeea6fdb15effbfa24ea0a5536b
 Author: Namhyung Kim <namhyung.kim@lge.com>
 Date:   Tue Aug 27 11:41:53 2013 +0900

     perf list: Skip unsupported events


uses the following code in tools/perf/util/parse-events.c:

        struct perf_event_attr attr = {
                .type = type,
                .config = config,
                .disabled = 1,
                .exclude_kernel = 1,
        };

On ARM machines pre-dating the Cortex-A15 this doesn't work, as
these machines don't support .exclude_kernel.  So starting with 3.12
"perf list" does not report any hardware events at all on older
machines (seen on Rasp-Pi, Pandaboard, Beagleboard, etc).

This version of the patch makes changes suggested by Namhyung Kim
to check for EACCESS and retry (instead of just dropping
the exclude_kernel) so we can properly handle machines where 
/proc/sys/kernel/perf_event_paranoid is set to 2.

Reported-by: Chad Paradis <chad.paradis@umit.maine.edu>
Signed-off-by: Vince Weaver <vincent.weaver@maine.edu>
Acked-by: Namhyung Kim <namhyung@kernel.org>

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 6de6f89..1fa98b9 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1082,12 +1082,12 @@ int is_valid_tracepoint(const char *event_string)
 static bool is_event_supported(u8 type, unsigned config)
 {
 	bool ret = true;
+	int open_return;
 	struct perf_evsel *evsel;
 	struct perf_event_attr attr = {
 		.type = type,
 		.config = config,
 		.disabled = 1,
-		.exclude_kernel = 1,
 	};
 	struct {
 		struct thread_map map;
@@ -1099,7 +1099,20 @@ static bool is_event_supported(u8 type, unsigned config)
 
 	evsel = perf_evsel__new(&attr);
 	if (evsel) {
-		ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
+		open_return = perf_evsel__open(evsel, NULL, &tmap.map);
+		ret = open_return >= 0;
+
+		if (open_return == -EACCES) {
+			/*
+			 * This happens if the paranoid value
+			 * /proc/sys/kernel/perf_event_paranoid is set to 2
+			 * Re-run with exclude_kernel set; we don't do that
+			 * by default as some ARM machines do not support it.
+			 *
+			 */
+			evsel->attr.exclude_kernel = 1;
+			ret = perf_evsel__open(evsel, NULL, &tmap.map) >= 0;
+		}
 		perf_evsel__delete(evsel);
 	}
 

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2014-02-22 17:55 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-30 20:39 [patch] perf tools: perf list broken on ARM Vince Weaver
2014-01-08 21:30 ` Vince Weaver
2014-01-09  8:17   ` Namhyung Kim
2014-01-09 12:12     ` Arnaldo Carvalho de Melo
2014-01-09 12:37       ` Namhyung Kim
2014-01-09 12:48         ` Arnaldo Carvalho de Melo
2014-02-05 20:34           ` Vince Weaver
2014-02-06 13:38             ` Arnaldo Carvalho de Melo
2014-01-09  9:02   ` Peter Zijlstra
2014-02-22 17:55 ` [tip:perf/core] perf list: Fix checking for supported events on older kernels tip-bot for Vince Weaver

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox