lkml.org 
[lkml]   [2020]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/13] KVM: nVMX: Preserve IRQ/NMI priority irrespective of exiting behavior
    Date
    Short circuit vmx_check_nested_events() if an unblocked IRQ/NMI is
    pending and needs to be injected into L2, priority between coincident
    events is not dependent on exiting behavior.

    Fixes: b6b8a1451fc4 ("KVM: nVMX: Rework interception of IRQs and NMIs")
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    ---
    arch/x86/kvm/vmx/nested.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c
    index 40b2427f35b7..1fdaca5fd93d 100644
    --- a/arch/x86/kvm/vmx/nested.c
    +++ b/arch/x86/kvm/vmx/nested.c
    @@ -3750,9 +3750,12 @@ static int vmx_check_nested_events(struct kvm_vcpu *vcpu)
    return 0;
    }

    - if (vcpu->arch.nmi_pending && nested_exit_on_nmi(vcpu)) {
    + if (vcpu->arch.nmi_pending && !vmx_nmi_blocked(vcpu)) {
    if (block_nested_events)
    return -EBUSY;
    + if (!nested_exit_on_nmi(vcpu))
    + goto no_vmexit;
    +
    nested_vmx_vmexit(vcpu, EXIT_REASON_EXCEPTION_NMI,
    NMI_VECTOR | INTR_TYPE_NMI_INTR |
    INTR_INFO_VALID_MASK, 0);
    @@ -3765,9 +3768,11 @@ static int vmx_check_nested_events(struct kvm_vcpu *vcpu)
    return 0;
    }

    - if (kvm_cpu_has_interrupt(vcpu) && nested_exit_on_intr(vcpu)) {
    + if (kvm_cpu_has_interrupt(vcpu) && !vmx_interrupt_blocked(vcpu)) {
    if (block_nested_events)
    return -EBUSY;
    + if (!nested_exit_on_intr(vcpu))
    + goto no_vmexit;
    nested_vmx_vmexit(vcpu, EXIT_REASON_EXTERNAL_INTERRUPT, 0, 0);
    return 0;
    }
    --
    2.26.0
    \
     
     \ /
      Last update: 2020-04-23 04:27    [W:4.054 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site