[PATCH 22/59] perf tools: Add evsel__new callback to parse_state_ops
From: Jiri Olsa <hidden>
Date: 2021-11-08 13:39:40
Subsystem:
performance events subsystem, the rest · Maintainers:
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Namhyung Kim, Linus Torvalds
Adding evsel__new callback to parse_state_ops to allow custom event allocation for event parsing. Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- tools/perf/util/parse-events.c | 13 ++++++++++--- tools/perf/util/parse-events.h | 5 +++++ 2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 8f8151738a78..e782a329484e 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c@@ -154,6 +154,10 @@ struct event_symbol event_symbols_sw[PERF_COUNT_SW_MAX] = { }, }; +static struct parse_events_ops parse_state_ops = { + .evsel__new = evsel__new_idx, +}; + #define __PERF_EVENT_FIELD(config, name) \ ((config & PERF_EVENT_##name##_MASK) >> PERF_EVENT_##name##_SHIFT)
@@ -376,7 +380,7 @@ __add_event(struct parse_events_state *parse_state, if (init_attr) event_attr_init(attr); - evsel = evsel__new_idx(attr, *idx); + evsel = parse_state->ops->evsel__new(attr, *idx); if (!evsel) { perf_cpu_map__put(cpus); return NULL;
@@ -2256,8 +2260,9 @@ static int parse_events__scanner(const char *str, int parse_events_terms(struct list_head *terms, const char *str) { struct parse_events_state parse_state = { - .terms = NULL, - .stoken = PE_START_TERMS, + .ops = &parse_state_ops, + .terms = NULL, + .stoken = PE_START_TERMS, }; int ret;
@@ -2283,6 +2288,7 @@ static int parse_events__with_hybrid_pmu(struct parse_events_state *parse_state, .stoken = PE_START_EVENTS, .hybrid_pmu_name = pmu_name, .idx = parse_state->idx, + .ops = &parse_state_ops, }; int ret;
@@ -2311,6 +2317,7 @@ int __parse_events(struct evlist *evlist, const char *str, .evlist = evlist, .stoken = PE_START_EVENTS, .fake_pmu = fake_pmu, + .ops = &parse_state_ops, }; int ret;
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index aedb1153a1a1..346c3a8cd381 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h@@ -130,6 +130,10 @@ struct parse_events_error { char *first_help; }; +struct parse_events_ops { + struct evsel* (*evsel__new)(struct perf_event_attr *attr, int idx); +}; + struct parse_events_state { struct list_head list; int idx;
@@ -140,6 +144,7 @@ struct parse_events_state { int stoken; struct perf_pmu *fake_pmu; char *hybrid_pmu_name; + struct parse_events_ops *ops; }; void parse_events__handle_error(struct parse_events_error *err, int idx,
--
2.31.1