perf pmu: Extract function to get JSON alias map
Extract the code to get the per cpu JSON alias into a separate function
for reuse. No behavior changes.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: http://lkml.kernel.org/r/20170831194036.30146-6-andi@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index ac16a9d..ed25d7f 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -516,6 +516,47 @@ char * __weak get_cpuid_str(void)
return NULL;
}
+static char *perf_pmu__getcpuid(void)
+{
+ char *cpuid;
+ static bool printed;
+
+ cpuid = getenv("PERF_CPUID");
+ if (cpuid)
+ cpuid = strdup(cpuid);
+ if (!cpuid)
+ cpuid = get_cpuid_str();
+ if (!cpuid)
+ return NULL;
+
+ if (!printed) {
+ pr_debug("Using CPUID %s\n", cpuid);
+ printed = true;
+ }
+ return cpuid;
+}
+
+struct pmu_events_map *perf_pmu__find_map(void)
+{
+ struct pmu_events_map *map;
+ char *cpuid = perf_pmu__getcpuid();
+ int i;
+
+ i = 0;
+ for (;;) {
+ map = &pmu_events_map[i++];
+ if (!map->table) {
+ map = NULL;
+ break;
+ }
+
+ if (!strcmp(map->cpuid, cpuid))
+ break;
+ }
+ free(cpuid);
+ return map;
+}
+
/*
* From the pmu_events_map, find the table of PMU events that corresponds
* to the current running CPU. Then, add all PMU events from that table
@@ -526,32 +567,11 @@ static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
int i;
struct pmu_events_map *map;
struct pmu_event *pe;
- char *cpuid;
- static bool printed;
- cpuid = getenv("PERF_CPUID");
- if (cpuid)
- cpuid = strdup(cpuid);
- if (!cpuid)
- cpuid = get_cpuid_str();
- if (!cpuid)
+ map = perf_pmu__find_map();
+ if (!map)
return;
- if (!printed) {
- pr_debug("Using CPUID %s\n", cpuid);
- printed = true;
- }
-
- i = 0;
- while (1) {
- map = &pmu_events_map[i++];
- if (!map->table)
- goto out;
-
- if (!strcmp(map->cpuid, cpuid))
- break;
- }
-
/*
* Found a matching PMU events table. Create aliases
*/
@@ -575,9 +595,6 @@ static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
(char *)pe->metric_expr,
(char *)pe->metric_name);
}
-
-out:
- free(cpuid);
}
struct perf_event_attr * __weak