Changeset 72808 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jul 3, 2018 7:02:16 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123351
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r72805 r72808 6492 6492 Assert(VMMRZCallRing3IsEnabled(pVCpu)); 6493 6493 6494 /* Pending HM CR3 sync. */6495 if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_CR3))6496 {6497 Assert(!(ASMAtomicUoReadU64(&pMixedCtx->fExtrn) & CPUMCTX_EXTRN_CR3));6498 int rc2 = PGMUpdateCR3(pVCpu, CPUMGetGuestCR3(pVCpu));6499 AssertMsgReturn(rc2 == VINF_SUCCESS || rc2 == VINF_PGM_SYNC_CR3,6500 ("%Rrc\n", rc2), RT_FAILURE_NP(rc2) ? rc2 : VERR_IPE_UNEXPECTED_INFO_STATUS);6501 Assert(!VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_CR3));6502 }6503 6504 /* Pending HM PAE PDPEs. */6505 if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_PAE_PDPES))6506 {6507 PGMGstUpdatePaePdpes(pVCpu, &pVCpu->hm.s.aPdpes[0]);6508 Assert(!VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_PAE_PDPES));6509 }6510 6511 6494 /* 6512 6495 * Anything pending? Should be more likely than not if we're doing a good job. … … 8274 8257 8275 8258 /* 8259 * A longjump might result in importing CR3 even for VM-exits that don't necessarily 8260 * import CR3 themselves. We will need to update them here as even as late as the above 8261 * hmR0VmxInjectPendingEvent() call may lazily import guest-CPU state on demand causing 8262 * the below force flags to be set. 8263 */ 8264 if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_CR3)) 8265 { 8266 Assert(!(ASMAtomicUoReadU64(&pMixedCtx->fExtrn) & CPUMCTX_EXTRN_CR3)); 8267 int rc2 = PGMUpdateCR3(pVCpu, CPUMGetGuestCR3(pVCpu)); 8268 AssertMsgReturn(rc2 == VINF_SUCCESS || rc2 == VINF_PGM_SYNC_CR3, 8269 ("%Rrc\n", rc2), RT_FAILURE_NP(rc2) ? rc2 : VERR_IPE_UNEXPECTED_INFO_STATUS); 8270 Assert(!VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_CR3)); 8271 } 8272 if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_PAE_PDPES)) 8273 { 8274 PGMGstUpdatePaePdpes(pVCpu, &pVCpu->hm.s.aPdpes[0]); 8275 Assert(!VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_PAE_PDPES)); 8276 } 8277 8278 /* 8276 8279 * No longjmps to ring-3 from this point on!!! 8277 8280 * Asserts() will still longjmp to ring-3 (but won't return), which is intentional, better than a kernel panic. … … 8580 8583 { 8581 8584 VMMRZCallRing3Enable(pVCpu); 8585 8586 Assert(!VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_CR3)); 8587 Assert(!VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_HM_UPDATE_PAE_PDPES)); 8582 8588 8583 8589 #if defined(HMVMX_ALWAYS_SYNC_FULL_GUEST_STATE) || defined(HMVMX_ALWAYS_SAVE_FULL_GUEST_STATE)
Note:
See TracChangeset
for help on using the changeset viewer.