Changeset 67159 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 31, 2017 9:30:28 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115835
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r67057 r67159 924 924 { 925 925 Assert(IEM_IS_SVM_CTRL_INTERCEPT_SET(pVCpu, SVM_CTRL_INTERCEPT_IOIO_PROT)); 926 Assert(cAddrSizeBits == 16 || cAddrSizeBits == 32 || cAddrSizeBits == 64);926 Assert(cAddrSizeBits == 0 || cAddrSizeBits == 16 || cAddrSizeBits == 32 || cAddrSizeBits == 64); 927 927 Assert(cbReg == 1 || cbReg == 2 || cbReg == 4 || cbReg == 8); 928 928 … … 3378 3378 uint32_t uErr, uint64_t uCr2) 3379 3379 { 3380 Assert( IEM_IS_SVM_ENABLED(pVCpu));3380 Assert(CPUMIsGuestInSvmNestedHwVirtMode(pCtx)); 3381 3381 3382 3382 /* … … 3432 3432 #endif 3433 3433 } 3434 Log2(("iemHandleSvmNstGstEventIntercept: Xcpt intercept. u 8Vector=%#x uExitInfo1=%#RX64, uExitInfo2=%#RX64 -> #VMEXIT\n",3435 u8Vector, uExitInfo1, uExitInfo2));3434 Log2(("iemHandleSvmNstGstEventIntercept: Xcpt intercept. u32InterceptXcpt=%#RX32 u8Vector=%#x uExitInfo1=%#RX64, uExitInfo2=%#RX64 -> #VMEXIT\n", 3435 pCtx->hwvirt.svm.VmcbCtrl.u32InterceptXcpt, u8Vector, uExitInfo1, uExitInfo2)); 3436 3436 IEM_RETURN_SVM_NST_GST_VMEXIT(pVCpu, SVM_EXIT_EXCEPTION_0 + u8Vector, uExitInfo1, uExitInfo2); 3437 3437 } … … 5467 5467 5468 5468 #ifdef VBOX_WITH_NESTED_HWVIRT 5469 if ( IEM_IS_SVM_ENABLED(pVCpu))5469 if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx)) 5470 5470 { 5471 5471 /* … … 16047 16047 #ifdef VBOX_WITH_NESTED_HWVIRT 16048 16048 /** 16049 * Interface for HM and EM to emulate the STGI instruction.16049 * Interface for HM and EM to emulate the CLGI instruction. 16050 16050 * 16051 16051 * @returns Strict VBox status code. -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r66848 r67159 5065 5065 if (IEM_IS_SVM_READ_CR_INTERCEPT_SET(pVCpu, iCrReg)) 5066 5066 { 5067 Log(("iemCImpl_ load_Cr%#x: Guest intercept -> #VMEXIT\n", iCrReg));5067 Log(("iemCImpl_mov_Rd_Cd%#x: Guest intercept -> #VMEXIT\n", iCrReg)); 5068 5068 IEM_RETURN_SVM_NST_GST_CRX_VMEXIT(pVCpu, SVM_EXIT_READ_CR0 + iCrReg, IEMACCESSCRX_MOV_CRX, iGReg); 5069 5069 } … … 5083 5083 case 8: 5084 5084 { 5085 #ifdef VBOX_WITH_NESTED_HWVIRT 5086 if (pCtx->hwvirt.svm.VmcbCtrl.IntCtrl.n.u1VIntrMasking) 5087 { 5088 crX = pCtx->hwvirt.svm.VmcbCtrl.IntCtrl.n.u8VTPR; 5089 break; 5090 } 5091 #endif 5085 5092 uint8_t uTpr; 5086 5093 int rc = APICGetTpr(pVCpu, &uTpr, NULL, NULL); … … 5434 5441 */ 5435 5442 case 8: 5443 { 5436 5444 if (uNewCrX & ~(uint64_t)0xf) 5437 5445 { … … 5440 5448 } 5441 5449 5442 if (IEM_IS_SVM_WRITE_CR_INTERCEPT_SET(pVCpu, /*cr*/ 8)) 5443 { 5444 Log(("iemCImpl_load_Cr%#x: Guest intercept -> #VMEXIT\n", iCrReg)); 5445 IEM_RETURN_SVM_NST_GST_CRX_VMEXIT(pVCpu, SVM_EXIT_WRITE_CR8, enmAccessCrX, iGReg); 5446 } 5447 5450 uint8_t const u8Tpr = (uint8_t)uNewCrX << 4; 5451 #ifdef VBOX_WITH_NESTED_HWVIRT 5452 if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx)) 5453 { 5454 if (IEM_IS_SVM_WRITE_CR_INTERCEPT_SET(pVCpu, /*cr*/ 8)) 5455 { 5456 Log(("iemCImpl_load_Cr%#x: Guest intercept -> #VMEXIT\n", iCrReg)); 5457 IEM_RETURN_SVM_NST_GST_CRX_VMEXIT(pVCpu, SVM_EXIT_WRITE_CR8, enmAccessCrX, iGReg); 5458 } 5459 5460 pCtx->hwvirt.svm.VmcbCtrl.IntCtrl.n.u8VTPR = u8Tpr; 5461 if (pCtx->hwvirt.svm.VmcbCtrl.IntCtrl.n.u1VIntrMasking) 5462 { 5463 rcStrict = VINF_SUCCESS; 5464 break; 5465 } 5466 } 5467 #endif 5448 5468 if (!IEM_FULL_VERIFICATION_ENABLED(pVCpu)) 5449 APICSetTpr(pVCpu, (uint8_t)uNewCrX << 4);5469 APICSetTpr(pVCpu, u8Tpr); 5450 5470 rcStrict = VINF_SUCCESS; 5451 5471 break; 5472 } 5452 5473 5453 5474 IEM_NOT_REACHED_DEFAULT_CASE_RET(); /* call checks */ … … 6194 6215 } 6195 6216 6196 VBOXSTRICTRC rcStrict = HMSvmVmrun(pVCpu, pCtx, GCPhysVmcb);6217 VBOXSTRICTRC rcStrict = HMSvmVmrun(pVCpu, pCtx, cbInstr, GCPhysVmcb); 6197 6218 /* If VMRUN execution causes a #VMEXIT, we continue executing the instruction following the VMRUN. */ 6198 6219 if (rcStrict == VINF_SVM_VMEXIT)
Note:
See TracChangeset
for help on using the changeset viewer.