• Paolo Bonzini's avatar
    KVM: nSVM: ignore L1 interrupt window while running L2 with V_INTR_MASKING=1 · 64b5bd27
    Paolo Bonzini authored
    If a nested VM is started while an IRQ was pending and with
    V_INTR_MASKING=1, the behavior of the guest depends on host IF.  If it
    is 1, the VM should exit immediately, before executing the first
    instruction of the guest, because VMRUN sets GIF back to 1.
    
    If it is 0 and the host has VGIF, however, at the time of the VMRUN
    instruction L0 is running the guest with a pending interrupt window
    request.  This interrupt window request is completely irrelevant to
    L2, since IF only controls virtual interrupts, so this patch drops
    INTERCEPT_VINTR from the VMCB while running L2 under these circumstances.
    To simplify the code, both steps of enabling the interrupt window
    (setting the VINTR intercept and requesting a fake virtual interrupt
    in svm_inject_irq) are grouped in the svm_set_vintr function, and
    likewise for dismissing the interrupt window request in svm_clear_vintr.
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    64b5bd27
svm.c 192 KB