]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf pmu: Factor term parsing into a perf_event_attr into a helper
authorIan Rogers <irogers@google.com>
Sun, 5 Oct 2025 18:24:12 +0000 (11:24 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 15 Oct 2025 14:59:10 +0000 (23:59 +0900)
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>
tools/perf/util/pmu.c

index 7992bd923515a2ba25d481cd9c46991631475df5..2c3e539851c480e92d94cc05ca0982d1771b1191 100644 (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;
        }