diff options
author | Jiri Olsa <jolsa@kernel.org> | 2018-06-05 08:14:16 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-06-06 11:52:05 -0400 |
commit | ceac7b79df7bd67ef9aaf464b0179a2686aff4ee (patch) | |
tree | 7ab7715776e65144bfc474eb2ae07829d8a09cf2 /tools/perf | |
parent | 0ce2da1483967c75a0e031af152e0fca4110d376 (diff) |
perf tools: Fix pmu events parsing rule
Currently all the event parsing fails end up
in the event_pmu rule, and display misleading
help like:
$ perf stat -e inst kill
event syntax error: 'inst'
\___ Cannot find PMU `inst'. Missing kernel support?
...
The reason is that the event_pmu is too strong
and match also single string. Changing it to
force the '/' separators to be part of the rule,
and getting the proper error now:
$ perf stat -e inst kill
event syntax error: 'inst'
\___ parser error
Run 'perf list' for a list of valid events
...
Suggested-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20180605121416.31645-1-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/util/parse-events.y | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index e37608a87dba..155d2570274f 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y | |||
@@ -73,6 +73,7 @@ static void inc_group_count(struct list_head *list, | |||
73 | %type <num> value_sym | 73 | %type <num> value_sym |
74 | %type <head> event_config | 74 | %type <head> event_config |
75 | %type <head> opt_event_config | 75 | %type <head> opt_event_config |
76 | %type <head> opt_pmu_config | ||
76 | %type <term> event_term | 77 | %type <term> event_term |
77 | %type <head> event_pmu | 78 | %type <head> event_pmu |
78 | %type <head> event_legacy_symbol | 79 | %type <head> event_legacy_symbol |
@@ -224,7 +225,7 @@ event_def: event_pmu | | |||
224 | event_bpf_file | 225 | event_bpf_file |
225 | 226 | ||
226 | event_pmu: | 227 | event_pmu: |
227 | PE_NAME opt_event_config | 228 | PE_NAME opt_pmu_config |
228 | { | 229 | { |
229 | struct list_head *list, *orig_terms, *terms; | 230 | struct list_head *list, *orig_terms, *terms; |
230 | 231 | ||
@@ -496,6 +497,17 @@ opt_event_config: | |||
496 | $$ = NULL; | 497 | $$ = NULL; |
497 | } | 498 | } |
498 | 499 | ||
500 | opt_pmu_config: | ||
501 | '/' event_config '/' | ||
502 | { | ||
503 | $$ = $2; | ||
504 | } | ||
505 | | | ||
506 | '/' '/' | ||
507 | { | ||
508 | $$ = NULL; | ||
509 | } | ||
510 | |||
499 | start_terms: event_config | 511 | start_terms: event_config |
500 | { | 512 | { |
501 | struct parse_events_state *parse_state = _parse_state; | 513 | struct parse_events_state *parse_state = _parse_state; |