Changeset 77094 in vbox for trunk/src/VBox
- Timestamp:
- Feb 1, 2019 8:54:35 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 128550
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r76856 r77094 1133 1133 } 1134 1134 1135 #if def VBOX_WITH_NESTED_HWVIRT_SVM1135 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 1136 1136 /** 1137 1137 * Performs a minimal reinitialization of the execution state. … … 5567 5567 } 5568 5568 } 5569 #endif /* VBOX_WITH_NESTED_HWVIRT_SVM */5569 #endif 5570 5570 5571 5571 /* … … 14336 14336 */ 14337 14337 /** @todo Can we centralize this under CPUMCanInjectInterrupt()? */ 14338 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) 14338 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 14339 14339 bool fIntrEnabled = CPUMGetGuestGif(&pVCpu->cpum.GstCtx); 14340 14340 if (fIntrEnabled) 14341 14341 { 14342 if (CPUMIsGuestInSvmNestedHwVirtMode(IEM_GET_CTX(pVCpu))) 14342 if (!CPUMIsGuestInNestedHwvirtMode(IEM_GET_CTX(pVCpu))) 14343 fIntrEnabled = pVCpu->cpum.GstCtx.eflags.Bits.u1IF; 14344 else if (CPUMIsGuestInVmxNonRootMode(IEM_GET_CTX(pVCpu))) 14345 fIntrEnabled = CPUMIsGuestVmxPhysIntrEnabled(pVCpu, IEM_GET_CTX(pVCpu)); 14346 else 14347 { 14348 Assert(CPUMIsGuestInSvmNestedHwVirtMode(IEM_GET_CTX(pVCpu))); 14343 14349 fIntrEnabled = CPUMIsGuestSvmPhysIntrEnabled(pVCpu, IEM_GET_CTX(pVCpu)); 14344 else 14345 fIntrEnabled = pVCpu->cpum.GstCtx.eflags.Bits.u1IF; 14350 } 14346 14351 } 14347 14352 #else … … 14357 14362 RTGCPTR uCr2; 14358 14363 int rc2 = TRPMQueryTrapAll(pVCpu, &u8TrapNo, &enmType, &uErrCode, &uCr2, NULL /* pu8InstLen */); AssertRC(rc2); 14359 IEMInjectTrap(pVCpu, u8TrapNo, enmType, (uint16_t)uErrCode, uCr2, 0 /* cbInstr */);14364 VBOXSTRICTRC rcStrict = IEMInjectTrap(pVCpu, u8TrapNo, enmType, (uint16_t)uErrCode, uCr2, 0 /* cbInstr */); 14360 14365 TRPMResetTrap(pVCpu); 14366 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 14367 /* Injecting an event may cause a VM-exit. */ 14368 if ( rcStrict != VINF_SUCCESS 14369 && rcStrict != VINF_IEM_RAISED_XCPT) 14370 return iemExecStatusCodeFiddling(pVCpu, rcStrict); 14371 #else 14372 NOREF(rcStrict); 14373 #endif 14361 14374 } 14362 14375 … … 14456 14469 iemMemRollback(pVCpu); 14457 14470 14458 #if def VBOX_WITH_NESTED_HWVIRT_SVM14471 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 14459 14472 /* 14460 14473 * When a nested-guest causes an exception intercept (e.g. #PF) when fetching … … 14633 14646 iemMemRollback(pVCpu); 14634 14647 14635 #if def VBOX_WITH_NESTED_HWVIRT_SVM14648 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 14636 14649 /* 14637 14650 * When a nested-guest causes an exception intercept (e.g. #PF) when fetching … … 14750 14763 14751 14764 VBOXSTRICTRC rcStrict = IEMInjectTrap(pVCpu, u8TrapNo, enmType, uErrCode, uCr2, cbInstr); 14752 # 14765 #ifdef VBOX_WITH_NESTED_HWVIRT_SVM 14753 14766 if (rcStrict == VINF_SVM_VMEXIT) 14754 14767 rcStrict = VINF_SUCCESS; 14755 # endif 14756 14768 #endif 14769 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 14770 if (rcStrict == VINF_VMX_VMEXIT) 14771 rcStrict = VINF_SUCCESS; 14772 #endif 14757 14773 /** @todo Are there any other codes that imply the event was successfully 14758 14774 * delivered to the guest? See @bugref{6607}. */ -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r77091 r77094 6569 6569 */ 6570 6570 uint64_t uTicks = TMCpuTickGet(pVCpu); 6571 #if def VBOX_WITH_NESTED_HWVIRT_SVM6571 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 6572 6572 uTicks = CPUMApplyNestedGuestTscOffset(pVCpu, uTicks); 6573 6573 #endif … … 6626 6626 6627 6627 uint64_t uTicks = TMCpuTickGet(pVCpu); 6628 #if def VBOX_WITH_NESTED_HWVIRT_SVM6628 #if defined(VBOX_WITH_NESTED_HWVIRT_SVM) || defined(VBOX_WITH_NESTED_HWVIRT_VMX) 6629 6629 uTicks = CPUMApplyNestedGuestTscOffset(pVCpu, uTicks); 6630 6630 #endif -
trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
r76993 r77094 1765 1765 } 1766 1766 1767 /* Segment attribute bits 31: 7 and 11:8 MBZ. */1767 /* Segment attribute bits 31:17 and 11:8 MBZ. */ 1768 1768 uint32_t const fValidAttrMask = X86DESCATTR_TYPE | X86DESCATTR_DT | X86DESCATTR_DPL | X86DESCATTR_P 1769 1769 | X86DESCATTR_AVL | X86DESCATTR_L | X86DESCATTR_D | X86DESCATTR_G | X86DESCATTR_UNUSABLE; … … 3317 3317 if ((fReadShadow & fGstHostMask) != (*puNewCrX & fGstHostMask)) 3318 3318 { 3319 Assert(fGstHostMask != 0); 3319 3320 Log2(("mov_Cr_Rd: (CR%u) Guest intercept -> VM-exit\n", iCrReg)); 3320 3321 … … 3967 3968 * We are injecting an external interrupt, check if we need to cause a VM-exit now. 3968 3969 * If not, the caller will continue delivery of the external interrupt as it would 3969 * normally. 3970 * normally. The interrupt is no longer pending in the interrupt controller at this 3971 * point. 3970 3972 */ 3971 3973 if (fFlags & IEM_XCPT_FLAGS_T_EXT_INT)
Note:
See TracChangeset
for help on using the changeset viewer.