> I don't think it's that expensive, especially compared to the
> double-context-switch and vmexit of the spinner going to sleep. On
> AMD we do have to take an extra vmexit (on IRET) though.
Fair enough - so if the vcpu blocks itself, it ends up being rescheduled
in the NMI handler, which then returns to the lock slowpath. And if its
a normal hlt, then you can also take interrupts if they're enabled while
spinning.
And if you get nested NMIs (since you can get multiple spurious kicks,
or from other NMI sources), then one NMI will get latched and any others
will get dropped?
> Well we could have a specialized sleep/wakeup hypercall pair like Xen,
> but I'd like to avoid it if at all possible.
Yeah, that's something that just falls out of the existing event channel
machinery, so it isn't something that I specifically added. But it does
mean that you simply end up with a hypercall returning on kick, with no
real complexities.