[PATCH] perf stat: Failure with "Operation not supported"

From: Anton Blanchard
Date: Thu Dec 01 2011 - 17:38:59 EST



perf stat is failing on PowerPC:


# perf stat /bin/true
Error: open_counter returned with 95 (Operation not supported). /bin/dmesg may provide additional information.

Fatal: Not all events could be opened.


commit 370faf1dd046 (perf stat: Fail softly on unsupported events)
added a check for failure returning ENOENT, but the POWER backend
returns EOPNOTSUPP. It looks like alpha, blackfin and mips do the
same.

With the patch applied, things work as expected:


# perf stat /bin/true
Performance counter stats for '/bin/true':

0.362176 task-clock # 0.623 CPUs utilized
0 context-switches # 0.000 M/sec
0 CPU-migrations # 0.000 M/sec
28 page-faults # 0.077 M/sec
1,677,020 cycles # 4.630 GHz
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
431,220 instructions # 0.26 insns per cycle
101,889 branches # 281.325 M/sec
4,145 branch-misses # 4.07% of all branches

0.000581361 seconds time elapsed


Signed-off-by: Anton Blanchard <anton@xxxxxxxxx>
Cc: <stable@xxxxxxxxxx> # 3.0+
---

Index: linux/tools/perf/builtin-stat.c
===================================================================
--- linux.orig/tools/perf/builtin-stat.c 2011-12-02 09:09:17.993942921 +1100
+++ linux/tools/perf/builtin-stat.c 2011-12-02 09:10:15.978939340 +1100
@@ -463,7 +463,8 @@ static int run_perf_stat(int argc __used

list_for_each_entry(counter, &evsel_list->entries, node) {
if (create_perf_stat_counter(counter, first) < 0) {
- if (errno == EINVAL || errno == ENOSYS || errno == ENOENT) {
+ if (errno == EINVAL || errno == ENOSYS ||
+ errno == ENOENT || errno == EOPNOTSUPP) {
if (verbose)
ui__warning("%s event is not supported by the kernel.\n",
event_name(counter));
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/