Index: /trunk/include/VBox/hwacc_vmx.h
===================================================================
--- /trunk/include/VBox/hwacc_vmx.h	(revision 26699)
+++ /trunk/include/VBox/hwacc_vmx.h	(revision 26700)
@@ -203,5 +203,5 @@
     uint64_t    u4Reserved      : 4;
     /** Big page (must be 0 here). */
-    uint64_t    u1Big           : 1;
+    uint64_t    u1Size          : 1;
     /** Available for software. */
     uint64_t    u4Available     : 4;
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 26699)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 26700)
@@ -1615,4 +1615,6 @@
 # endif
     SHWPDE          PdeDst   = *pPdeDst;
+
+    /* In the guest SMP case we could have blocked while another VCPU reused this page table. */
     if (!PdeDst.n.u1Present)
     {
@@ -1920,7 +1922,18 @@
     PdeDst = pPDDst->a[iPDDst];
 # endif
-    AssertMsg(PdeDst.n.u1Present, ("%#llx\n", (uint64_t)PdeDst.u));
+    /* In the guest SMP case we could have blocked while another VCPU reused this page table. */
+    if (!PdeDst.n.u1Present)
+    {
+        AssertMsg(pVM->cCpus > 1, ("Unexpected missing PDE %RX64\n", (uint64_t)PdeDst.u));
+        Log(("CPU%d: SyncPage: Pde at %RGv changed behind our back!\n", GCPtrPage));
+        return VINF_SUCCESS;    /* force the instruction to be executed again. */
+    }
+
     PPGMPOOLPAGE  pShwPage = pgmPoolGetPage(pPool, PdeDst.u & SHW_PDE_PG_MASK);
     PSHWPT        pPTDst   = (PSHWPT)PGMPOOL_PAGE_2_PTR(pVM, pShwPage);
+
+    /* Can happen in the guest SMP case; other VCPU activated this PDE while we were blocking to handle the page fault. */
+    if (PdeDst.n.u1Size)
+        return VINF_SUCCESS;
 
     Assert(cPages == 1 || !(uErr & X86_TRAP_PF_P));
