Index: /trunk/src/VBox/VMM/PGMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PGMInternal.h	(revision 30300)
+++ /trunk/src/VBox/VMM/PGMInternal.h	(revision 30301)
@@ -3402,6 +3402,6 @@
 void            pgmR3PoolResetUnpluggedCpu(PVM pVM, PVMCPU pVCpu);
 void            pgmR3PoolReset(PVM pVM);
-void            pgmR3PoolClearAll(PVM pVM);
-DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *pvUser);
+void            pgmR3PoolClearAll(PVM pVM, bool fFlushRemTlb);
+DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *fpvFlushRemTbl);
 
 #endif /* IN_RING3 */
Index: /trunk/src/VBox/VMM/PGMPool.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMPool.cpp	(revision 30300)
+++ /trunk/src/VBox/VMM/PGMPool.cpp	(revision 30301)
@@ -596,8 +596,9 @@
  * @param   pVM     The VM handle.
  * @param   pVCpu   The VMCPU for the EMT we're being called on. Unused.
- * @param   pvUser  Unused parameter.
- *
- */
-DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *pvUser)
+ * @param   fpvFlushRemTlb  When not NULL, we'll flush the REM TLB as well.
+ *                          (This is the pvUser, so it has to be void *.)
+ *
+ */
+DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *fpvFlushRemTbl)
 {
     PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool);
@@ -790,8 +791,13 @@
     /* Flush job finished. */
     VM_FF_CLEAR(pVM, VM_FF_PGM_POOL_FLUSH_PENDING);
-
     pPool->cPresent = 0;
     pgmUnlock(pVM);
+
     PGM_INVL_ALL_VCPU_TLBS(pVM);
+
+    if (fpvFlushRemTbl)
+        for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
+            CPUMSetChangedFlags(&pVM->aCpus[idCpu], CPUM_CHANGED_GLOBAL_TLB_FLUSH);
+
     STAM_PROFILE_STOP(&pPool->StatClearAll, c);
     return VINF_SUCCESS;
@@ -802,9 +808,11 @@
  * Clears the shadow page pool.
  *
- * @param   pVM         The VM handle.
- */
-void pgmR3PoolClearAll(PVM pVM)
+ * @param   pVM             The VM handle.
+ * @param   fFlushRemTlb    When set, the REM TLB is scheduled for flushing as
+ *                          well.
+ */
+void pgmR3PoolClearAll(PVM pVM, bool fFlushRemTlb)
 {
-    int rc = VMMR3EmtRendezvous(pVM, VMMEMTRENDEZVOUS_FLAGS_TYPE_ONCE, pgmR3PoolClearAllRendezvous, NULL);
+    int rc = VMMR3EmtRendezvous(pVM, VMMEMTRENDEZVOUS_FLAGS_TYPE_ONCE, pgmR3PoolClearAllRendezvous, &fFlushRemTlb);
     AssertRC(rc);
 }
Index: /trunk/src/VBox/VMM/PGMSavedState.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMSavedState.cpp	(revision 30300)
+++ /trunk/src/VBox/VMM/PGMSavedState.cpp	(revision 30301)
@@ -1548,5 +1548,5 @@
                         if (paLSPages[iPage].fIgnore)
                             continue;
-                        if (PGM_PAGE_GET_TYPE(&pCur->aPages[iPage]) != PGMPAGETYPE_RAM) /* in case of recent ramppings */
+                        if (PGM_PAGE_GET_TYPE(&pCur->aPages[iPage]) != PGMPAGETYPE_RAM) /* in case of recent remappings */
                             continue;
                         if (    PGM_PAGE_GET_STATE(&pCur->aPages[iPage])
@@ -1775,5 +1775,5 @@
     pgmR3ScanMmio2Pages(pVM, uPass);
     pgmR3ScanRamPages(pVM, false /*fFinalPass*/);
-    pgmR3PoolClearAll(pVM); /** @todo this could perhaps be optimized a bit. */
+    pgmR3PoolClearAll(pVM, true /*fFlushRemTlb*/); /** @todo this could perhaps be optimized a bit. */
 
     /*
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 30300)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 30301)
@@ -2571,5 +2571,5 @@
 # ifdef IN_RING3 /* Don't flush in ring-0 or raw mode, it's taking too long. */
     if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_CLEAR_PGM_POOL)
-        pgmR3PoolClearAll(pVM);
+        pgmR3PoolClearAll(pVM, false /*fFlushRemTlb*/);
 # else  /* !IN_RING3 */
     if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_CLEAR_PGM_POOL)
