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:
Ian Rogers
2025-10-05 11:24:12 -07:00
committed by Namhyung Kim
parent 7f20b3dd93
commit 70424bb5ff

View File

@@ -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;
}