Changeset 87487 in vbox for trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
- Timestamp:
- Jan 29, 2021 6:06:39 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 142509
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r87480 r87487 731 731 { hmR0SvmVmRun_WithXcr0_WithIbpbEntry_WithIbpbExit }, 732 732 }; 733 uintptr_t const idx = (pVCpu->hm .s.fLoadSaveGuestXcr0? 1 : 0)733 uintptr_t const idx = (pVCpu->hmr0.s.fLoadSaveGuestXcr0 ? 1 : 0) 734 734 | (pVCpu->cpum.GstCtx.fWorldSwitcher & CPUMCTX_WSF_IBPB_ENTRY ? 2 : 0) 735 735 | (pVCpu->cpum.GstCtx.fWorldSwitcher & CPUMCTX_WSF_IBPB_EXIT ? 4 : 0); … … 1291 1291 { 1292 1292 STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushTlbWorldSwitch); 1293 pVCpu->hm .s.fForceTLBFlush = true;1293 pVCpu->hmr0.s.fForceTLBFlush = true; 1294 1294 fNewAsid = true; 1295 1295 } … … 1301 1301 if (VMCPU_FF_TEST_AND_CLEAR(pVCpu, VMCPU_FF_TLB_FLUSH)) 1302 1302 { 1303 pVCpu->hm .s.fForceTLBFlush = true;1303 pVCpu->hmr0.s.fForceTLBFlush = true; 1304 1304 STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushTlb); 1305 1305 } … … 1324 1324 { 1325 1325 pVmcb->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_NOTHING; 1326 if (pVCpu->hm .s.fForceTLBFlush)1326 if (pVCpu->hmr0.s.fForceTLBFlush) 1327 1327 { 1328 1328 /* Clear the VMCB Clean Bit for NP while flushing the TLB. See @bugref{7152}. */ … … 1360 1360 } 1361 1361 1362 pVCpu->hm .s.fForceTLBFlush = false;1362 pVCpu->hmr0.s.fForceTLBFlush = false; 1363 1363 } 1364 1364 } … … 1669 1669 /* Whether to save/load/restore XCR0 during world switch depends on CR4.OSXSAVE and host+guest XCR0. */ 1670 1670 bool const fLoadSaveGuestXcr0 = (pCtx->cr4 & X86_CR4_OSXSAVE) && pCtx->aXcr[0] != ASMGetXcr0(); 1671 if (fLoadSaveGuestXcr0 != pVCpu->hm .s.fLoadSaveGuestXcr0)1672 { 1673 pVCpu->hm .s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0;1671 if (fLoadSaveGuestXcr0 != pVCpu->hmr0.s.fLoadSaveGuestXcr0) 1672 { 1673 pVCpu->hmr0.s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0; 1674 1674 hmR0SvmUpdateVmRunFunction(pVCpu); 1675 1675 } … … 1918 1918 if (fStepping) 1919 1919 { 1920 pVCpu->hm .s.fClearTrapFlag = true;1920 pVCpu->hmr0.s.fClearTrapFlag = true; 1921 1921 pVmcb->guest.u64RFlags |= X86_EFL_TF; 1922 1922 fInterceptMovDRx = true; /* Need clean DR6, no guest mess. */ … … 1952 1952 * with the same values. */ 1953 1953 fInterceptMovDRx = true; 1954 pVCpu->hm .s.fUsingHyperDR7 = true;1954 pVCpu->hmr0.s.fUsingHyperDR7 = true; 1955 1955 Log5(("hmR0SvmExportSharedDebugState: Loaded hyper DRx\n")); 1956 1956 } … … 1967 1967 pVmcb->ctrl.u32VmcbCleanBits &= ~HMSVM_VMCB_CLEAN_DRX; 1968 1968 } 1969 pVCpu->hm .s.fUsingHyperDR7 = false;1969 pVCpu->hmr0.s.fUsingHyperDR7 = false; 1970 1970 1971 1971 /* … … 2280 2280 == (HM_CHANGED_HOST_CONTEXT | HM_CHANGED_SVM_HOST_GUEST_SHARED_STATE)); 2281 2281 2282 pVCpu->hm .s.fLeaveDone = false;2282 pVCpu->hmr0.s.fLeaveDone = false; 2283 2283 return VINF_SUCCESS; 2284 2284 } … … 2308 2308 VMMRZCallRing3Disable(pVCpu); 2309 2309 2310 if (!pVCpu->hm .s.fLeaveDone)2310 if (!pVCpu->hmr0.s.fLeaveDone) 2311 2311 { 2312 2312 hmR0SvmLeave(pVCpu, false /* fImportState */); 2313 pVCpu->hm .s.fLeaveDone = true;2313 pVCpu->hmr0.s.fLeaveDone = true; 2314 2314 } 2315 2315 … … 2342 2342 == (HM_CHANGED_HOST_CONTEXT | HM_CHANGED_SVM_HOST_GUEST_SHARED_STATE)); 2343 2343 2344 pVCpu->hm .s.fLeaveDone = false;2344 pVCpu->hmr0.s.fLeaveDone = false; 2345 2345 2346 2346 /* Restore longjmp state. */ … … 2818 2818 if (fWhat & CPUMCTX_EXTRN_DR6) 2819 2819 { 2820 if (!pVCpu->hm .s.fUsingHyperDR7)2820 if (!pVCpu->hmr0.s.fUsingHyperDR7) 2821 2821 pCtx->dr[6] = pVmcbGuest->u64DR6; 2822 2822 else … … 2826 2826 if (fWhat & CPUMCTX_EXTRN_DR7) 2827 2827 { 2828 if (!pVCpu->hm .s.fUsingHyperDR7)2828 if (!pVCpu->hmr0.s.fUsingHyperDR7) 2829 2829 pCtx->dr[7] = pVmcbGuest->u64DR7; 2830 2830 else … … 2994 2994 /* When thread-context hooks are used, we can avoid doing the leave again if we had been preempted before 2995 2995 and done this from the SVMR0ThreadCtxCallback(). */ 2996 if (!pVCpu->hm .s.fLeaveDone)2996 if (!pVCpu->hmr0.s.fLeaveDone) 2997 2997 { 2998 2998 hmR0SvmLeave(pVCpu, true /* fImportState */); 2999 pVCpu->hm .s.fLeaveDone = true;2999 pVCpu->hmr0.s.fLeaveDone = true; 3000 3000 } 3001 3001 … … 4620 4620 * Clear the X86_EFL_TF if necessary. 4621 4621 */ 4622 if (pVCpu->hm .s.fClearTrapFlag)4623 { 4624 pVCpu->hm .s.fClearTrapFlag = false;4622 if (pVCpu->hmr0.s.fClearTrapFlag) 4623 { 4624 pVCpu->hmr0.s.fClearTrapFlag = false; 4625 4625 pCtx->eflags.Bits.u1TF = 0; 4626 4626 } … … 6553 6553 bool const fLoadSaveGuestXcr0 = (pCtx->cr4 & X86_CR4_OSXSAVE) && pCtx->aXcr[0] != ASMGetXcr0(); 6554 6554 Log4Func(("New XCR0=%#RX64 fLoadSaveGuestXcr0=%RTbool (cr4=%#RX64)\n", pCtx->aXcr[0], fLoadSaveGuestXcr0, pCtx->cr4)); 6555 if (fLoadSaveGuestXcr0 != pVCpu->hm .s.fLoadSaveGuestXcr0)6556 { 6557 pVCpu->hm .s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0;6555 if (fLoadSaveGuestXcr0 != pVCpu->hmr0.s.fLoadSaveGuestXcr0) 6556 { 6557 pVCpu->hmr0.s.fLoadSaveGuestXcr0 = fLoadSaveGuestXcr0; 6558 6558 hmR0SvmUpdateVmRunFunction(pVCpu); 6559 6559 }
Note:
See TracChangeset
for help on using the changeset viewer.