[...]
I added this to deal with the case where you're sending an IPI to
another VCPU which isn't currently running on a real cpu. In this case
you could end up spinning while the other VCPU is waiting for a real CPU
to run on. (Basically the same problem that spinlocks have in a virtual
environment.)
However, this is at best a partial solution to the problem, and I never
benchmarked if it really makes a difference. Since any other virtual
environment would have the same problem, its best if we can solve it
generically. (Of course a synchronous single-target cross-cpu call is a
simple cross-cpu rpc, which could be implemented very efficiently in the
host/hypervisor by simply doing a vcpu context switch...)
J
--