[PATCH]: perf: fix error handling of unknown events

From: Stephane Eranian
Date: Fri Jul 22 2011 - 22:10:28 EST



There was a problem with the parse_events() code not
printing the correct event name when an event was unknown
and starting with an 'r'. The source of the problem was
the way raw notation was parsed.

Without the patch:
$ perf stat -e retired_foo
invalid event modifier: 'tired_foo'

With the patch:
$ perf stat -e retired_foo
invalid or unsupported event: 'retired_foo'

This also covers the case where the name of the event was
not printed at all when perf was linked with libpfm4.

Signed-off-by: Stephane Eranian <eranian@xxxxxxxxxx>
---

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 4ea7e19..8c1cb10 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -697,7 +697,11 @@ parse_raw_event(const char **strp, struct perf_event_attr *attr)
return EVT_FAILED;
n = hex2u64(str + 1, &config);
if (n > 0) {
- *strp = str + n + 1;
+ const char *end = str + n + 1;
+ if (*end != '\0' && *end != ',' && *end != ':')
+ return EVT_FAILED;
+
+ *strp = end;
attr->type = PERF_TYPE_RAW;
attr->config = config;
return EVT_HANDLED;
--
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/