On Wed, Sep 23, 2020 at 04:44:01PM +0200, Paolo Bonzini wrote:
Queued, thanks.
I cannot think of a "nicer" way to do this, we could perhaps move
vmx->nested.pi_pending = true;
kvm_make_request(KVM_REQ_EVENT, vcpu);
kvm_apic_clear_irr(vcpu, vmx->nested.posted_intr_nv);
to a separate function (possibly with the IRR clear made conditional, so that we can reuse the function for regular posted interrupt injection) but that is it.
Ya, I played around with similar approaches and didn't particular like any of them :-/
For the record, I suspect there may be additional issues with a doubly nested scenario, i.e. when running L3 and L2 is using the self-IPI method for triggering posted interrupts. I sort of tested once, and it appeared to be broken, but it's entirely possible that there was an issue somewhere else in my stack (L0, L1 and L2 all had non-trivial KVM changes), and I haven't yet had time to dig in. That, and I suspect I'm the only person that would care about L3 functioning properly in this scenario :-)