mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-19 00:01:01 -04:00
perf pmu: Factor term parsing into a perf_event_attr into a helper
Factor existing functionality in perf_pmu__name_from_config into a helper that will be used in later patches. Tested-by: Thomas Richter <tmricht@linux.ibm.com> Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: James Clark <james.clark@linaro.org> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
@@ -1763,6 +1763,24 @@ static int check_info_data(struct perf_pmu *pmu,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int perf_pmu__parse_terms_to_attr(struct perf_pmu *pmu, const char *terms_str,
|
||||
struct perf_event_attr *attr)
|
||||
{
|
||||
struct parse_events_terms terms;
|
||||
int ret;
|
||||
|
||||
parse_events_terms__init(&terms);
|
||||
ret = parse_events_terms(&terms, terms_str);
|
||||
if (ret) {
|
||||
pr_debug("Failed to parse terms '%s': %d\n", terms_str, ret);
|
||||
parse_events_terms__exit(&terms);
|
||||
return ret;
|
||||
}
|
||||
ret = perf_pmu__config(pmu, attr, &terms, /*apply_hardcoded=*/true, /*err=*/NULL);
|
||||
parse_events_terms__exit(&terms);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find alias in the terms list and replace it with the terms
|
||||
* defined for the alias
|
||||
@@ -2596,21 +2614,8 @@ const char *perf_pmu__name_from_config(struct perf_pmu *pmu, u64 config)
|
||||
hashmap__for_each_entry(pmu->aliases, entry, bkt) {
|
||||
struct perf_pmu_alias *event = entry->pvalue;
|
||||
struct perf_event_attr attr = {.config = 0,};
|
||||
struct parse_events_terms terms;
|
||||
int ret;
|
||||
int ret = perf_pmu__parse_terms_to_attr(pmu, event->terms, &attr);
|
||||
|
||||
parse_events_terms__init(&terms);
|
||||
ret = parse_events_terms(&terms, event->terms);
|
||||
if (ret) {
|
||||
pr_debug("Failed to parse '%s' terms '%s': %d\n",
|
||||
event->name, event->terms, ret);
|
||||
parse_events_terms__exit(&terms);
|
||||
continue;
|
||||
}
|
||||
ret = perf_pmu__config(pmu, &attr, &terms, /*apply_hardcoded=*/true,
|
||||
/*err=*/NULL);
|
||||
|
||||
parse_events_terms__exit(&terms);
|
||||
if (ret == 0 && config == attr.config)
|
||||
return event->name;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user