Skip to content

Commit ee72a94

Browse files
Kan LiangPeter Zijlstra
authored andcommitted
perf/x86/intel: Fix fixed counter check warning for some Alder Lake
For some Alder Lake machine, the below fixed counter check warning may be triggered. [ 2.010766] hw perf events fixed 5 > max(4), clipping! Current perf unconditionally increases the number of the GP counters and the fixed counters for a big core PMU on an Alder Lake system, because the number enumerated in the CPUID only reflects the common counters. The big core may has more counters. However, Alder Lake may have an alternative configuration. With that configuration, the X86_FEATURE_HYBRID_CPU is not set. The number of the GP counters and fixed counters enumerated in the CPUID is accurate. Perf mistakenly increases the number of counters. The warning is triggered. Directly use the enumerated value on the system with the alternative configuration. Fixes: f83d2f9 ("perf/x86/intel: Add Alder Lake Hybrid support") Reported-by: Jin Yao <yao.jin@linux.intel.com> Signed-off-by: Kan Liang <kan.liang@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/1624029174-122219-2-git-send-email-kan.liang@linux.intel.com
1 parent 4c58d92 commit ee72a94

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

arch/x86/events/intel/core.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6157,8 +6157,13 @@ __init int intel_pmu_init(void)
61576157
pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_CORE_IDX];
61586158
pmu->name = "cpu_core";
61596159
pmu->cpu_type = hybrid_big;
6160-
pmu->num_counters = x86_pmu.num_counters + 2;
6161-
pmu->num_counters_fixed = x86_pmu.num_counters_fixed + 1;
6160+
if (cpu_feature_enabled(X86_FEATURE_HYBRID_CPU)) {
6161+
pmu->num_counters = x86_pmu.num_counters + 2;
6162+
pmu->num_counters_fixed = x86_pmu.num_counters_fixed + 1;
6163+
} else {
6164+
pmu->num_counters = x86_pmu.num_counters;
6165+
pmu->num_counters_fixed = x86_pmu.num_counters_fixed;
6166+
}
61626167
pmu->max_pebs_events = min_t(unsigned, MAX_PEBS_EVENTS, pmu->num_counters);
61636168
pmu->unconstrained = (struct event_constraint)
61646169
__EVENT_CONSTRAINT(0, (1ULL << pmu->num_counters) - 1,

0 commit comments

Comments
 (0)