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; 14+ 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] 14+ messages in thread
* [patch] perf tools: perf list broken on ARM
@ 2013-12-09 21:58 Vince Weaver
  2013-12-10  2:11 ` Namhyung Kim
  0 siblings, 1 reply; 14+ messages in thread
From: Vince Weaver @ 2013-12-09 21:58 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: linux-kernel, Chad Paradis, David Ahern, Ingo Molnar, Jiri Olsa,
	Paul Mackerras, Peter Zijlstra, Stephane Eranian

Hello,

"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).

If we drop the "exclude_kernel" attribute events are properly reported.

Reported-by: Chad Paradis <chad.paradis@umit.maine.edu>
Signed-off-by: Vince Weaver <vincent.weaver@maine.edu>

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 6de6f89..360ecab 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1087,7 +1087,6 @@ static bool is_event_supported(u8 type, unsigned config)
 		.type = type,
 		.config = config,
 		.disabled = 1,
-		.exclude_kernel = 1,
 	};
 	struct {
 		struct thread_map map;

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

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

Thread overview: 14+ 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
  -- strict thread matches above, loose matches on Subject: below --
2013-12-09 21:58 [patch] perf tools: perf list broken on ARM Vince Weaver
2013-12-10  2:11 ` Namhyung Kim
2013-12-10  3:58   ` Vince Weaver
2013-12-10  5:08     ` Namhyung Kim

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