On 07/02/2017 20:58, Radim Krčmář wrote: >> - local_irq_disable(); >> + if (kvm_lapic_enabled(vcpu)) { >> + /* >> + * This handles the case where a posted interrupt was >> + * notified with kvm_vcpu_kick. >> + */ >> + if (kvm_x86_ops->sync_pir_to_irr) >> + kvm_x86_ops->sync_pir_to_irr(vcpu); > Hm, this is not working well when nesting while L1 has assigned devices: > if the posted interrupt arrives just before local_irq_disable(), then > we'll just enter L2 instead of doing a nested VM exit (in case we have > interrupt exiting). > > And after reading the code a bit, I think we allow posted interrupts in > L2 while L1 has assigned devices that use posted interrupts, and that it > doesn't work. So you mean the interrupt is delivered to L2? The fix would be to wrap L2 entry and exit with some subset of pi_pre_block/pi_post_block. Paolo