|
@@ -516,16 +516,8 @@ char * __weak get_cpuid_str(void)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * 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
|
|
|
- * as aliases.
|
|
|
- */
|
|
|
-static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
|
|
|
+static char *perf_pmu__getcpuid(void)
|
|
|
{
|
|
|
- int i;
|
|
|
- struct pmu_events_map *map;
|
|
|
- struct pmu_event *pe;
|
|
|
char *cpuid;
|
|
|
static bool printed;
|
|
|
|
|
@@ -535,22 +527,50 @@ static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
|
|
|
if (!cpuid)
|
|
|
cpuid = get_cpuid_str();
|
|
|
if (!cpuid)
|
|
|
- return;
|
|
|
+ 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;
|
|
|
- while (1) {
|
|
|
+ for (;;) {
|
|
|
map = &pmu_events_map[i++];
|
|
|
- if (!map->table)
|
|
|
- goto out;
|
|
|
+ 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
|
|
|
+ * as aliases.
|
|
|
+ */
|
|
|
+static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ struct pmu_events_map *map;
|
|
|
+ struct pmu_event *pe;
|
|
|
+
|
|
|
+ map = perf_pmu__find_map();
|
|
|
+ if (!map)
|
|
|
+ return;
|
|
|
|
|
|
/*
|
|
|
* 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
|