- Timestamp:
- Oct 18, 2018 6:02:15 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
r74861 r74900 2642 2642 } 2643 2643 else 2644 IEM_VMX_VME NTRY_FAILED_RET(pVCpu, uExitReason, pszFailure, kVmxVDiag_Vmexit_MsrLoadRsvd);2644 IEM_VMX_VMEXIT_FAILED_RET(pVCpu, uExitReason, pszFailure, kVmxVDiag_Vmexit_MsrLoadRsvd); 2645 2645 } 2646 2646 } … … 2791 2791 pVCpu->cpum.GstCtx.hwvirt.vmx.fInVmxNonRootMode = false; 2792 2792 2793 return rcStrict; 2793 Assert(rcStrict == VINF_SUCCESS); 2794 return VINF_VMX_VMEXIT; 2794 2795 } 2795 2796 … … 4929 4930 4930 4931 /** 4932 * Checks if an interrupt-window exiting occurs immediately as part of VM-entry. 4933 * 4934 * @returns VBox status code. 4935 * @param pVCpu The cross context virtual CPU structure. 4936 * @param pszInstr The VMX instruction name (for logging purposes). 4937 * 4938 * @remarks This must be called after loading the guest-state and switching 4939 * page-tables as part of VM-entry! 4940 */ 4941 IEM_STATIC int iemVmxVmentryCheckIntWindowExit(PVMCPU pVCpu, const char *pszInstr) 4942 { 4943 /* 4944 * An interrupt-window exit occurs immediately after VM-entry if interrupts 4945 * are enabled and the interrupt-window exit control is set. 4946 * 4947 * See Intel spec. 25.2 "Other Causes Of VM Exits". 4948 */ 4949 PCVMXVVMCS pVmcs = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pVmcs); 4950 Assert(pVmcs); 4951 4952 if ( (pVmcs->u32ProcCtls & VMX_PROC_CTLS_INT_WINDOW_EXIT) 4953 && pVCpu->cpum.GstCtx.eflags.Bits.u1IF 4954 && !VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)) 4955 { 4956 Log(("%s: Interrupt-window detected during VM-entry -> VM-exit\n", pszInstr)); 4957 return iemVmxVmexitIntWindow(pVCpu); 4958 } 4959 4960 return VINF_VMX_INTERCEPT_NOT_ACTIVE; 4961 } 4962 4963 4964 /** 4931 4965 * Checks host-state as part of VM-entry. 4932 4966 * … … 6056 6090 pVCpu->cpum.GstCtx.hwvirt.vmx.fInVmxNonRootMode = true; 6057 6091 6092 /* Check premature interrupt-window exiting. */ 6093 rc = iemVmxVmentryCheckIntWindowExit(pVCpu, pszInstr); 6094 if (rc == VINF_VMX_INTERCEPT_NOT_ACTIVE) 6095 { /* likely */ } 6096 else if (rc == VINF_VMX_VMEXIT) 6097 return VINF_SUCCESS; 6098 6058 6099 /* Now that we've switched page tables, we can inject events if any. */ 6059 6100 iemVmxVmentryInjectEvent(pVCpu, pszInstr);
Note:
See TracChangeset
for help on using the changeset viewer.

