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