perf pmu: Skip invalid hybrid pmu
On hybrid platform, such as Alderlake, if atom CPUs are offlined, the kernel still exports the sysfs path '/sys/devices/cpu_atom/' for 'cpu_atom' pmu but the file '/sys/devices/cpu_atom/cpus' is empty, which indicates this is an invalid pmu. Need to check and skip the invalid hybrid pmu. Before: # perf list ... branch-instructions OR cpu_atom/branch-instructions/ [Kernel PMU event] branch-instructions OR cpu_core/branch-instructions/ [Kernel PMU event] branch-misses OR cpu_atom/branch-misses/ [Kernel PMU event] branch-misses OR cpu_core/branch-misses/ [Kernel PMU event] bus-cycles OR cpu_atom/bus-cycles/ [Kernel PMU event] bus-cycles OR cpu_core/bus-cycles/ [Kernel PMU event] ... The cpu_atom events are still displayed even if atom CPUs are offlined. After: # perf list ... branch-instructions OR cpu_core/branch-instructions/ [Kernel PMU event] branch-misses OR cpu_core/branch-misses/ [Kernel PMU event] bus-cycles OR cpu_core/bus-cycles/ [Kernel PMU event] ... Now only cpu_core events are displayed. Signed-off-by: Jin Yao <yao.jin@linux.intel.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jin Yao <yao.jin@intel.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lore.kernel.org/lkml/20210708013701.20347-2-yao.jin@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
40226a3d96
commit
49afa7f6c7
@ -950,6 +950,13 @@ static struct perf_pmu *pmu_lookup(const char *name)
|
||||
LIST_HEAD(format);
|
||||
LIST_HEAD(aliases);
|
||||
__u32 type;
|
||||
bool is_hybrid = perf_pmu__hybrid_mounted(name);
|
||||
|
||||
/*
|
||||
* Check pmu name for hybrid and the pmu may be invalid in sysfs
|
||||
*/
|
||||
if (!strncmp(name, "cpu_", 4) && !is_hybrid)
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* The pmu data we store & need consists of the pmu
|
||||
@ -978,7 +985,7 @@ static struct perf_pmu *pmu_lookup(const char *name)
|
||||
pmu->is_uncore = pmu_is_uncore(name);
|
||||
if (pmu->is_uncore)
|
||||
pmu->id = pmu_id(name);
|
||||
pmu->is_hybrid = perf_pmu__hybrid_mounted(name);
|
||||
pmu->is_hybrid = is_hybrid;
|
||||
pmu->max_precise = pmu_max_precise(name);
|
||||
pmu_add_cpu_aliases(&aliases, pmu);
|
||||
pmu_add_sys_aliases(&aliases, pmu);
|
||||
|
Loading…
Reference in New Issue
Block a user