• Jan Kiszka's avatar
    KVM: nVMX: Rework event injection and recovery · 5f3d5799
    Jan Kiszka authored
    The basic idea is to always transfer the pending event injection on
    vmexit into the architectural state of the VCPU and then drop it from
    there if it turns out that we left L2 to enter L1, i.e. if we enter
    prepare_vmcs12.
    
    vmcs12_save_pending_events takes care to transfer pending L0 events into
    the queue of L1. That is mandatory as L1 may decide to switch the guest
    state completely, invalidating or preserving the pending events for
    later injection (including on a different node, once we support
    migration).
    
    This concept is based on the rule that a pending vmlaunch/vmresume is
    not canceled. Otherwise, we would risk to lose injected events or leak
    them into the wrong queues. Encode this rule via a WARN_ON_ONCE at the
    entry of nested_vmx_vmexit.
    Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
    5f3d5799
vmx.c 222 KB