perf parse: Provide a way to pass a fake_pmu to parse_events()

This is an alternative patch to what Jiri sent that instead of changing
all callers to parse_events() for allowing to pass a fake_pmu, provide
another function specifically for that.

From Jiri's patch:

This way it's possible to parse events from PMUs which are not present
in the system. It's available only for testing purposes coming in
following changes, so all the current users set fake_pmu argument as
false.
Based-on-a-patch-by: default avatarJiri Olsa <jolsa@kernel.org>
Link: http://lore.kernel.org/lkml/20200602214741.1218986-3-jolsa@kernel.orgAcked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 34bacc95
...@@ -2088,15 +2088,16 @@ int parse_events_terms(struct list_head *terms, const char *str) ...@@ -2088,15 +2088,16 @@ int parse_events_terms(struct list_head *terms, const char *str)
return ret; return ret;
} }
int parse_events(struct evlist *evlist, const char *str, int __parse_events(struct evlist *evlist, const char *str,
struct parse_events_error *err) struct parse_events_error *err, struct perf_pmu *fake_pmu)
{ {
struct parse_events_state parse_state = { struct parse_events_state parse_state = {
.list = LIST_HEAD_INIT(parse_state.list), .list = LIST_HEAD_INIT(parse_state.list),
.idx = evlist->core.nr_entries, .idx = evlist->core.nr_entries,
.error = err, .error = err,
.evlist = evlist, .evlist = evlist,
.stoken = PE_START_EVENTS, .stoken = PE_START_EVENTS,
.fake_pmu = fake_pmu,
}; };
int ret; int ret;
......
...@@ -33,8 +33,15 @@ const char *event_type(int type); ...@@ -33,8 +33,15 @@ const char *event_type(int type);
int parse_events_option(const struct option *opt, const char *str, int unset); int parse_events_option(const struct option *opt, const char *str, int unset);
int parse_events_option_new_evlist(const struct option *opt, const char *str, int unset); int parse_events_option_new_evlist(const struct option *opt, const char *str, int unset);
int parse_events(struct evlist *evlist, const char *str, int __parse_events(struct evlist *evlist, const char *str, struct parse_events_error *error,
struct parse_events_error *error); struct perf_pmu *fake_pmu);
static inline int parse_events(struct evlist *evlist, const char *str,
struct parse_events_error *err)
{
return __parse_events(evlist, str, err, NULL);
}
int parse_events_terms(struct list_head *terms, const char *str); int parse_events_terms(struct list_head *terms, const char *str);
int parse_filter(const struct option *opt, const char *str, int unset); int parse_filter(const struct option *opt, const char *str, int unset);
int exclude_perf(const struct option *opt, const char *arg, int unset); int exclude_perf(const struct option *opt, const char *arg, int unset);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment