|
@@ -539,9 +539,10 @@ static bool pmu_is_uncore(const char *name)
|
|
|
|
|
|
/*
|
|
|
* PMU CORE devices have different name other than cpu in sysfs on some
|
|
|
- * platforms. looking for possible sysfs files to identify as core device.
|
|
|
+ * platforms.
|
|
|
+ * Looking for possible sysfs files to identify the arm core device.
|
|
|
*/
|
|
|
-static int is_pmu_core(const char *name)
|
|
|
+static int is_arm_pmu_core(const char *name)
|
|
|
{
|
|
|
struct stat st;
|
|
|
char path[PATH_MAX];
|
|
@@ -550,12 +551,6 @@ static int is_pmu_core(const char *name)
|
|
|
if (!sysfs)
|
|
|
return 0;
|
|
|
|
|
|
- /* Look for cpu sysfs (x86 and others) */
|
|
|
- scnprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu", sysfs);
|
|
|
- if ((stat(path, &st) == 0) &&
|
|
|
- (strncmp(name, "cpu", strlen("cpu")) == 0))
|
|
|
- return 1;
|
|
|
-
|
|
|
/* Look for cpu sysfs (specific to arm) */
|
|
|
scnprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/cpus",
|
|
|
sysfs, name);
|
|
@@ -668,6 +663,7 @@ static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu)
|
|
|
struct pmu_events_map *map;
|
|
|
struct pmu_event *pe;
|
|
|
const char *name = pmu->name;
|
|
|
+ const char *pname;
|
|
|
|
|
|
map = perf_pmu__find_map(pmu);
|
|
|
if (!map)
|
|
@@ -686,11 +682,9 @@ static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (!is_pmu_core(name)) {
|
|
|
- /* check for uncore devices */
|
|
|
- if (pe->pmu == NULL)
|
|
|
- continue;
|
|
|
- if (strncmp(pe->pmu, name, strlen(pe->pmu)))
|
|
|
+ if (!is_arm_pmu_core(name)) {
|
|
|
+ pname = pe->pmu ? pe->pmu : "cpu";
|
|
|
+ if (strncmp(pname, name, strlen(pname)))
|
|
|
continue;
|
|
|
}
|
|
|
|