2625
2621
PdeDst = *pPdeDst;
2628
# else /* PGM_WITHOUT_MAPPINGS */
2629
Assert(!pgmMapAreMappingsEnabled(&pVM->pgm.s));
2630
# endif /* PGM_WITHOUT_MAPPINGS */
2624
# endif /* !PGM_WITHOUT_MAPPINGS */
2631
2625
Assert(!PdeDst.n.u1Present); /* We're only supposed to call SyncPT on PDE!P and conflicts.*/
2633
2627
# if defined(IN_RC)
3478
3472
PGM_GST_NAME(HandlerVirtualUpdate)(pVM, cr4);
3479
3473
STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,SyncCR3Handlers), h);
3480
3474
pgmUnlock(pVM);
3475
#endif /* !NESTED && !EPT */
3483
3477
#if PGM_SHW_TYPE == PGM_TYPE_NESTED || PGM_SHW_TYPE == PGM_TYPE_EPT
3493
3488
* AMD64 (Shw & Gst) - No need to check all paging levels; we zero
3494
3489
* out the shadow parts when the guest modifies its tables.
3491
Assert(!pgmMapAreMappingsEnabled(&pVM->pgm.s));
3496
3492
return VINF_SUCCESS;
3498
3494
#else /* PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT && PGM_SHW_TYPE != PGM_TYPE_AMD64 */
3500
# ifdef PGM_WITHOUT_MAPPINGS
3501
Assert(pVM->pgm.s.fMappingsFixed);
3502
return VINF_SUCCESS;
3504
/* Nothing to do when mappings are fixed. */
3505
if (pVM->pgm.s.fMappingsFixed)
3506
return VINF_SUCCESS;
3508
int rc = PGMMapResolveConflicts(pVM);
3509
Assert(rc == VINF_SUCCESS || rc == VINF_PGM_SYNC_CR3);
3510
if (rc == VINF_PGM_SYNC_CR3)
3496
# ifndef PGM_WITHOUT_MAPPINGS
3498
* Check for and resolve conflicts with our guest mappings if they
3499
* are enabled and not fixed.
3501
if (pgmMapAreMappingsFloating(&pVM->pgm.s))
3512
LogFlow(("SyncCR3: detected conflict -> VINF_PGM_SYNC_CR3\n"));
3513
return VINF_PGM_SYNC_CR3;
3503
int rc = pgmMapResolveConflicts(pVM);
3504
Assert(rc == VINF_SUCCESS || rc == VINF_PGM_SYNC_CR3);
3505
if (rc == VINF_PGM_SYNC_CR3)
3507
LogFlow(("SyncCR3: detected conflict -> VINF_PGM_SYNC_CR3\n"));
3508
return VINF_PGM_SYNC_CR3;
3512
Assert(!pgmMapAreMappingsEnabled(&pVM->pgm.s));
3516
3514
return VINF_SUCCESS;
3517
3515
#endif /* PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT && PGM_SHW_TYPE != PGM_TYPE_AMD64 */