diff options
author | Kan Liang <kan.liang@intel.com> | 2014-10-07 11:08:50 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-10-15 15:05:01 -0400 |
commit | dcb4e1022b40d886027500821a592dd8f8ccde8f (patch) | |
tree | 45db2ff649f7a4b447e8274e307d001a468c07f0 /tools/perf/util/parse-events.h | |
parent | 42f60c2d63b0d3f7230d28ac37c1da4885d4ee65 (diff) |
perf tools: Parse the pmu event prefix and suffix
There are two types of event formats for PMU events. E.g. el-abort OR
cpu/el-abort/. However, the lexer mistakenly recognizes the simple style
format as two events.
The parse_events_pmu_check function uses bsearch to search the name in
known pmu event list. It can tell the lexer that the name is a PE_NAME
or a PMU event name prefix or a PMU event name suffix. All these
information will be used for accurately parsing kernel PMU events.
The pmu events list will be read from sysfs at runtime.
Note: Currently, the patch only want to handle the PMU event name as
"a-b" and "a". The only exception, "stalled-cycles-frontend" and
"stalled-cycles-fronted", are already hardcoded in lexer.
Signed-off-by: Kan Liang <kan.liang@intel.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1412694532-23391-3-git-send-email-kan.liang@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/parse-events.h')
-rw-r--r-- | tools/perf/util/parse-events.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index df094b4ed5ed..db2cf78ff0f3 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h | |||
@@ -35,6 +35,18 @@ extern int parse_filter(const struct option *opt, const char *str, int unset); | |||
35 | 35 | ||
36 | #define EVENTS_HELP_MAX (128*1024) | 36 | #define EVENTS_HELP_MAX (128*1024) |
37 | 37 | ||
38 | enum perf_pmu_event_symbol_type { | ||
39 | PMU_EVENT_SYMBOL_ERR, /* not a PMU EVENT */ | ||
40 | PMU_EVENT_SYMBOL, /* normal style PMU event */ | ||
41 | PMU_EVENT_SYMBOL_PREFIX, /* prefix of pre-suf style event */ | ||
42 | PMU_EVENT_SYMBOL_SUFFIX, /* suffix of pre-suf style event */ | ||
43 | }; | ||
44 | |||
45 | struct perf_pmu_event_symbol { | ||
46 | char *symbol; | ||
47 | enum perf_pmu_event_symbol_type type; | ||
48 | }; | ||
49 | |||
38 | enum { | 50 | enum { |
39 | PARSE_EVENTS__TERM_TYPE_NUM, | 51 | PARSE_EVENTS__TERM_TYPE_NUM, |
40 | PARSE_EVENTS__TERM_TYPE_STR, | 52 | PARSE_EVENTS__TERM_TYPE_STR, |
@@ -95,6 +107,8 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx, | |||
95 | void *ptr, char *type); | 107 | void *ptr, char *type); |
96 | int parse_events_add_pmu(struct list_head *list, int *idx, | 108 | int parse_events_add_pmu(struct list_head *list, int *idx, |
97 | char *pmu , struct list_head *head_config); | 109 | char *pmu , struct list_head *head_config); |
110 | enum perf_pmu_event_symbol_type | ||
111 | perf_pmu__parse_check(const char *name); | ||
98 | void parse_events__set_leader(char *name, struct list_head *list); | 112 | void parse_events__set_leader(char *name, struct list_head *list); |
99 | void parse_events_update_lists(struct list_head *list_event, | 113 | void parse_events_update_lists(struct list_head *list_event, |
100 | struct list_head *list_all); | 114 | struct list_head *list_all); |