• Paolo Bonzini's avatar
    KVM: x86: accept userspace interrupt only if no event is injected · fa7a549d
    Paolo Bonzini authored
    Once an exception has been injected, any side effects related to
    the exception (such as setting CR2 or DR6) have been taked place.
    Therefore, once KVM sets the VM-entry interruption information
    field or the AMD EVENTINJ field, the next VM-entry must deliver that
    exception.
    
    Pending interrupts are processed after injected exceptions, so
    in theory it would not be a problem to use KVM_INTERRUPT when
    an injected exception is present.  However, DOSEMU is using
    run->ready_for_interrupt_injection to detect interrupt windows
    and then using KVM_SET_SREGS/KVM_SET_REGS to inject the
    interrupt manually.  For this to work, the interrupt window
    must be delayed after the completion of the previous event
    injection.
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarStas Sergeev <stsp2@yandex.ru>
    Tested-by: default avatarStas Sergeev <stsp2@yandex.ru>
    Fixes: 71cc849b ("KVM: x86: Fix split-irqchip vs interrupt injection window request")
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    fa7a549d
x86.c 322 KB