diff options
| -rw-r--r-- | tools/perf/util/pmu.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 7992bd923515..2c3e539851c4 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -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; } |
