On 02.07.2025 16:41, Andrew Cooper wrote: > @@ -461,12 +468,19 @@ void mwait_idle_with_hints(unsigned int eax, unsigned > int ecx) > > monitor(this_softirq_pending, 0, 0); > > + ASSERT(!local_irq_is_enabled()); > + > if ( !*this_softirq_pending ) > { > struct cpu_info *info = get_cpu_info(); > > spec_ctrl_enter_idle(info); > - mwait(eax, ecx); > + > + if ( ecx & MWAIT_ECX_INTERRUPT_BREAK ) > + mwait(eax, ecx); > + else > + sti_mwait_cli(eax, ecx);
Actually, I'm curious: It seems quite likely that you did consider an alternative resulting in assembly code like this: test $MWAIT_ECX_INTERRUPT_BREAK, %cl jz 0f sti 0: monitor cli CLI being a relatively cheap operation aiui, is there anything wrong or undesirable with this (smaller overall) alternative? Jan