On Sun, Sep 24, 2017 at 11:57:53PM -0300, Marcelo Tosatti wrote: > I think you are missing the following point: > > "vcpu0 can be interrupted when its not in a spinlock protected section, > otherwise it can't." > > So you _have_ to communicate to the host when the guest enters/leaves a > critical section. > > So this point of "everything needs to be RT and the priorities must be > designed carefully", is this: > > WHEN in spinlock protected section (more specifically, when > spinlock protected section _shared with realtime vcpus_), > > priority of vcpu0 > priority of emulator thread > > OTHERWISE > > priority of vcpu0 < priority of emulator thread. > > (*) > > So emulator thread can interrupt and inject interrupts to vcpu0. spinlock protected regions are not everything. What about lock-free constructs where CPU's spin-wait on one another (there's plenty). And I'm clearly ignorant of how this emulation thread works, but why would it run for a long time? Either it is needed for forward progress of the VCPU or its not. If its not, it shouldn't run.