X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmx.c;h=f6a6a0b5db5aaf10e0aeedc03068ea8f6560d162;hb=b283373f3067fe329fb6c526f62d72cec27f4149;hp=eb79fa352c65dce90fcef02facbf41f3470341a8;hpb=9058423c8215f5abb3ad2fb789c5b16a250e7c65;p=palacios.git diff --git a/palacios/src/palacios/vmx.c b/palacios/src/palacios/vmx.c index eb79fa3..f6a6a0b 100644 --- a/palacios/src/palacios/vmx.c +++ b/palacios/src/palacios/vmx.c @@ -726,10 +726,15 @@ int v3_vmx_enter(struct guest_info * info) { update_irq_exit_state(info); #endif - // Handle any exits needed still in the atomic section - if (v3_handle_atomic_vmx_exit(info, &exit_info) == -1) { - PrintError("Error in atomic VMX exit handler\n"); - return -1; + if (exit_info.exit_reason == VMEXIT_INTR_WINDOW) { + // This is a special case whose only job is to inject an interrupt + vmcs_read(VMCS_PROC_CTRLS, &(vmx_info->pri_proc_ctrls.value)); + vmx_info->pri_proc_ctrls.int_wndw_exit = 0; + vmcs_write(VMCS_PROC_CTRLS, vmx_info->pri_proc_ctrls.value); + +#ifdef CONFIG_DEBUG_INTERRUPTS + PrintDebug("Interrupts available again! (RIP=%llx)\n", info->rip); +#endif } // reenable global interrupts after vm exit