On 23/04/2025 12:32 pm, Roger Pau Monne wrote: > There are several errata on Intel regarding the usage of the MONITOR/MWAIT > instructions, all having in common that stores to the monitored region > might not wake up the CPU. > > Fix them by forcing the sending of an IPI for the affected models. > > The Ice Lake issue has been reproduced internally on XenServer hardware, > and the fix does seem to prevent it. The symptom was APs getting stuck in > the idle loop immediately after bring up, which in turn prevented the BSP > from making progress. This would happen before the watchdog was > initialized, and hence the whole system would get stuck. > > Signed-off-by: Roger Pau Monné <roger....@citrix.com> > --- > Apollo and Lunar Lake fixes have not been tested, due to lack of hardware.
Acked-by: Andrew Cooper <andrew.coop...@citrix.com> > diff --git a/xen/arch/x86/acpi/cpu_idle.c b/xen/arch/x86/acpi/cpu_idle.c > index 420198406def..1dbf15b01ed7 100644 > --- a/xen/arch/x86/acpi/cpu_idle.c > +++ b/xen/arch/x86/acpi/cpu_idle.c > @@ -441,8 +441,14 @@ void cpuidle_wakeup_mwait(cpumask_t *mask) > cpumask_andnot(mask, mask, &target); > } > > +/* Force sending of a wakeup IPI regardless of mwait usage. */ > +bool __ro_after_init force_mwait_ipi_wakeup; > + > bool arch_skip_send_event_check(unsigned int cpu) > { > + if ( force_mwait_ipi_wakeup ) > + return false; > + I don't especially like this. The callers are a loop over all CPUs, and this can't be inlined/simplified automatically. But, lets get the fix in place first. Optimising comes later. ~Andrew