From 8d383185ec491b6188eb749a03fc9c6da9357392 Mon Sep 17 00:00:00 2001 From: Yu Wang Date: Tue, 14 Aug 2018 14:34:32 +0000 Subject: [PATCH] hv: virq: disable interrupt-window exiting in vmexit handler In interrupt-window exiting handler, disable it directly even there has pending interrupts. The later acrn_handle_pending_request will re-evaluation and re-enable it if needed. Signed-off-by: Yu Wang Acked-by: Anthony Xu --- hypervisor/arch/x86/virq.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/hypervisor/arch/x86/virq.c b/hypervisor/arch/x86/virq.c index 4d3cf35aa..b14d7d70f 100644 --- a/hypervisor/arch/x86/virq.c +++ b/hypervisor/arch/x86/virq.c @@ -337,22 +337,13 @@ int interrupt_window_vmexit_handler(struct vcpu *vcpu) TRACE_2L(TRACE_VMEXIT_INTERRUPT_WINDOW, 0UL, 0UL); - if (vcpu == NULL) - return -1; - - if (vcpu_pending_request(vcpu)) { - /* Do nothing - * acrn_handle_pending_request will continue for this vcpu - */ - } else { - /* No interrupts to inject. - * Disable the interrupt window exiting - */ - vcpu->arch_vcpu.irq_window_enabled = 0U; - value32 = exec_vmread32(VMX_PROC_VM_EXEC_CONTROLS); - value32 &= ~(VMX_PROCBASED_CTLS_IRQ_WIN); - exec_vmwrite32(VMX_PROC_VM_EXEC_CONTROLS, value32); - } + /* Disable interrupt-window exiting first. + * acrn_handle_pending_request will continue handle for this vcpu + */ + vcpu->arch_vcpu.irq_window_enabled = 0U; + value32 = exec_vmread32(VMX_PROC_VM_EXEC_CONTROLS); + value32 &= ~(VMX_PROCBASED_CTLS_IRQ_WIN); + exec_vmwrite32(VMX_PROC_VM_EXEC_CONTROLS, value32); vcpu_retain_rip(vcpu); return 0;