[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] x86/nmi: ensure Global Performance Counter Control is setup correctly
When Architectural Performance Monitoring is available, the PERF_GLOBAL_CTRL MSR contains per-counter enable bits that is ANDed with the enable bit in the counter EVNTSEL MSR in order for a PMC counter to be enabled. So far the watchdog code seems to have relied on the PERF_GLOBAL_CTRL enable bits being set by default, but at least on some Intel Sapphire and Emerald Rapids this is no longer the case, and Xen reports: Testing NMI watchdog on all CPUs: 0 40 stuck The first CPU on each socket is started with PERF_GLOBAL_CTRL zeroed, so PMC0 doesn't start counting when the enable bit in EVNTSEL0 is set, due to the relevant enable bit in PERF_GLOBAL_CTRL not being set. Fix by detecting when Architectural Performance Monitoring is available and making sure the enable bit for PMC0 is set in PERF_GLOBAL_CTRL. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- The fact that it's only the first CPU on each socket that's started with PERF_GLOBAL_CTRL clear looks like a firmware bug to me, but in any case making sure PERF_GLOBAL_CTRL is properly setup should be done regardless. --- xen/arch/x86/nmi.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c index dc79c25e3ffd..7a6601c4fd31 100644 --- a/xen/arch/x86/nmi.c +++ b/xen/arch/x86/nmi.c @@ -335,6 +335,19 @@ static void setup_p6_watchdog(unsigned counter) nmi_p6_event_width > BITS_PER_LONG ) return; + if ( cpu_has_arch_perfmon ) + { + uint64_t global_ctrl; + + rdmsrl(MSR_CORE_PERF_GLOBAL_CTRL, global_ctrl); + /* + * Make sure PMC0 is enabled in global control, as the enable bit in + * PERF_GLOBAL_CTRL is AND'ed with the enable bit in EVNTSEL0. + */ + if ( !(global_ctrl & 1) ) + wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, global_ctrl | 1); + } + clear_msr_range(MSR_P6_EVNTSEL(0), 2); clear_msr_range(MSR_P6_PERFCTR(0), 2); -- 2.43.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |