Index: /trunk/include/VBox/pgm.h
===================================================================
--- /trunk/include/VBox/pgm.h	(revision 24722)
+++ /trunk/include/VBox/pgm.h	(revision 24723)
@@ -357,5 +357,5 @@
 VMMDECL(int)        PGMPhysGCPtr2HCPhys(PVMCPU pVCpu, RTGCPTR GCPtr, PRTHCPHYS pHCPhys);
 VMMDECL(void)       PGMPhysInvalidatePageMapTLB(PVM pVM);
-
+VMMDECL(void)       PGMPhysInvalidatePageMapTLBEntry(PVM pVM, RTGCPHYS GCPhys);
 VMMDECL(int)        PGMPhysGCPhys2CCPtr(PVM pVM, RTGCPHYS GCPhys, void **ppv, PPGMPAGEMAPLOCK pLock);
 VMMDECL(int)        PGMPhysGCPhys2CCPtrReadOnly(PVM pVM, RTGCPHYS GCPhys, void const **ppv, PPGMPAGEMAPLOCK pLock);
Index: /trunk/src/VBox/VMM/PGM.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGM.cpp	(revision 24722)
+++ /trunk/src/VBox/VMM/PGM.cpp	(revision 24723)
@@ -1609,4 +1609,5 @@
     PGM_REG_COUNTER(&pPGM->StatR3PageMapTlbMisses,            "/PGM/R3/Page/MapTlbMisses",          "TLB misses.");
     PGM_REG_COUNTER(&pPGM->StatPageMapTlbFlushes,             "/PGM/R3/Page/MapTlbFlushes",         "TLB flushes (all contexts).");
+    PGM_REG_COUNTER(&pPGM->StatPageMapTlbFlushEntry,          "/PGM/R3/Page/MapTlbFlushEntry",      "TLB entry flushes (all contexts).");
 
     PGM_REG_PROFILE(&pPGM->StatRZSyncCR3HandlerVirtualUpdate, "/PGM/RZ/SyncCR3/Handlers/VirtualUpdate", "Profiling of the virtual handler updates.");
Index: /trunk/src/VBox/VMM/PGMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PGMInternal.h	(revision 24722)
+++ /trunk/src/VBox/VMM/PGMInternal.h	(revision 24723)
@@ -2778,4 +2778,5 @@
     STAMCOUNTER StatRZPageMapTlbMisses;             /**< RC/R0: Ring-3/0 page mapper TLB misses. */
     STAMCOUNTER StatPageMapTlbFlushes;              /**< ALL: Ring-3/0 page mapper TLB flushes. */
+    STAMCOUNTER StatPageMapTlbFlushEntry;           /**< ALL: Ring-3/0 page mapper TLB flushes. */
     STAMCOUNTER StatR3ChunkR3MapTlbHits;            /**< R3: Ring-3/0 chunk mapper TLB hits. */
     STAMCOUNTER StatR3ChunkR3MapTlbMisses;          /**< R3: Ring-3/0 chunk mapper TLB misses. */
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp	(revision 24722)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp	(revision 24723)
@@ -192,5 +192,5 @@
 
 /**
- * Invalidates the all page mapping TLBs.
+ * Invalidates all page mapping TLBs.
  *
  * @param   pVM     The VM handle.
@@ -200,4 +200,5 @@
     pgmLock(pVM);
     STAM_COUNTER_INC(&pVM->pgm.s.StatPageMapTlbFlushes);
+    /* Clear the shared R0/R3 TLB completely. */
     for (unsigned i = 0; i < RT_ELEMENTS(pVM->pgm.s.PhysTlbHC.aEntries); i++)
     {
@@ -209,4 +210,32 @@
     /* @todo clear the RC TLB whenever we add it. */
     pgmUnlock(pVM);
+}
+
+/**
+ * Invalidates a page mapping TLB entry
+ *
+ * @param   pVM     The VM handle.
+ * @param   GCPhys  GCPhys entry to flush
+ */
+VMMDECL(void) PGMPhysInvalidatePageMapTLBEntry(PVM pVM, RTGCPHYS GCPhys)
+{
+    Assert(PGMIsLocked(pVM));
+
+    STAM_COUNTER_INC(&pVM->pgm.s.StatPageMapTlbFlushEntry);
+    /* Clear the shared R0/R3 TLB entry. */
+#ifdef IN_RC
+    unsigned idx = PGM_PAGER3MAPTLB_IDX(GCPhys);
+    pVM->pgm.s.PhysTlbHC.aEntries[idx].GCPhys = NIL_RTGCPHYS;
+    pVM->pgm.s.PhysTlbHC.aEntries[idx].pPage = 0;
+    pVM->pgm.s.PhysTlbHC.aEntries[idx].pMap = 0;
+    pVM->pgm.s.PhysTlbHC.aEntries[idx].pv = 0;
+#else
+    PPGMPAGEMAPTLBE pTlbe = &pVM->pgm.s.CTXSUFF(PhysTlb).aEntries[PGM_PAGEMAPTLB_IDX(GCPhys)];
+    pTlbe->GCPhys = NIL_RTGCPHYS;
+    pTlbe->pPage  = 0;
+    pTlbe->pMap   = 0;
+    pTlbe->pv     = 0;
+#endif
+    /* @todo clear the RC TLB whenever we add it. */
 }
 
@@ -399,5 +428,5 @@
     PGM_PAGE_SET_PAGEID(pPage, pVM->pgm.s.aHandyPages[iHandyPage].idPage);
     PGM_PAGE_SET_STATE(pPage, PGM_PAGE_STATE_ALLOCATED);
-    PGMPhysInvalidatePageMapTLB(pVM);
+    PGMPhysInvalidatePageMapTLBEntry(pVM, GCPhys);
 
     if (    fFlushTLBs
