Index: /trunk/src/VBox/VMM/Makefile.kmk
===================================================================
--- /trunk/src/VBox/VMM/Makefile.kmk	(revision 54822)
+++ /trunk/src/VBox/VMM/Makefile.kmk	(revision 54823)
@@ -68,4 +68,7 @@
 ifdef VBOX_WITH_64ON32_CMOS_DEBUG
  VMM_COMMON_DEFS += VBOX_WITH_64ON32_CMOS_DEBUG
+endif
+ifeq ($(KBUILD_TARGET),amd64)
+ VMM_COMMON_DEFS += VBOX_WITH_MORE_RING0_MEM_MAPPINGS
 endif
 
Index: /trunk/src/VBox/VMM/VMMR3/MMHyper.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/MMHyper.cpp	(revision 54822)
+++ /trunk/src/VBox/VMM/VMMR3/MMHyper.cpp	(revision 54823)
@@ -816,5 +816,5 @@
                               0 /*fFlags*/,
                               &pv,
-#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
+#if defined(VBOX_WITH_2X_4GB_ADDR_SPACE) || defined(VBOX_WITH_MORE_RING0_MEM_MAPPINGS)
                               &pvR0,
 #else
@@ -824,5 +824,5 @@
     if (RT_SUCCESS(rc))
     {
-#ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
+#if !defined(VBOX_WITH_2X_4GB_ADDR_SPACE) && !defined(VBOX_WITH_MORE_RING0_MEM_MAPPINGS)
         pvR0 = (uintptr_t)pv;
 #endif
@@ -1012,13 +1012,21 @@
                               0 /*fFlags*/,
                               &pvPages,
+#ifdef VBOX_WITH_MORE_RING0_MEM_MAPPINGS
+                              &pvR0,
+#else
                               fFlags & MMHYPER_AONR_FLAGS_KERNEL_MAPPING ? &pvR0 : NULL,
+#endif
                               paPages);
     if (RT_SUCCESS(rc))
     {
+#ifdef VBOX_WITH_MORE_RING0_MEM_MAPPINGS
+        Assert(pvR0 != NIL_RTR0PTR);
+#else
         if (!(fFlags & MMHYPER_AONR_FLAGS_KERNEL_MAPPING))
-#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
+# ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
             pvR0 = NIL_RTR0PTR;
-#else
+# else
             pvR0 = (RTR0PTR)pvPages;
+# endif
 #endif
 
Index: /trunk/src/VBox/VMM/VMMR3/MMPagePool.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/MMPagePool.cpp	(revision 54822)
+++ /trunk/src/VBox/VMM/VMMR3/MMPagePool.cpp	(revision 54823)
@@ -63,5 +63,5 @@
      */
     /** @todo @bufref{1865},@bufref{3202}: mapping the page pool page into
-     *        ring-0. Need to change the wasy we allocate it... */
+     *        ring-0. Need to change the ways we allocate it... */
     AssertReleaseReturn(sizeof(*pVM->mm.s.pPagePoolR3) + sizeof(*pVM->mm.s.pPagePoolLowR3) < PAGE_SIZE, VERR_INTERNAL_ERROR);
     int rc = SUPR3PageAllocEx(1, 0 /*fFlags*/, (void **)&pVM->mm.s.pPagePoolR3, NULL /*pR0Ptr*/, NULL /*paPages*/);
Index: /trunk/src/VBox/VMM/VMMR3/PGMPhys.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/PGMPhys.cpp	(revision 54822)
+++ /trunk/src/VBox/VMM/VMMR3/PGMPhys.cpp	(revision 54823)
@@ -1569,5 +1569,7 @@
     void        *pvChunk      = NULL;
     int rc = SUPR3PageAllocEx(cChunkPages, 0 /*fFlags*/, &pvChunk,
-#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
+#if defined(VBOX_WITH_MORE_RING0_MEM_MAPPINGS)
+                              &R0PtrChunk,
+#elif defined(VBOX_WITH_2X_4GB_ADDR_SPACE)
                               HMIsEnabled(pVM) ? &R0PtrChunk : NULL,
 #else
@@ -1577,5 +1579,7 @@
     if (RT_SUCCESS(rc))
     {
-#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
+#if defined(VBOX_WITH_MORE_RING0_MEM_MAPPINGS)
+        Assert(R0PtrChunk != NIL_RTR0PTR);
+#elif defined(VBOX_WITH_2X_4GB_ADDR_SPACE)
         if (!HMIsEnabled(pVM))
             R0PtrChunk = NIL_RTR0PTR;
@@ -4047,5 +4051,5 @@
                  * Flush dangling PGM pointers (R3 & R0 ptrs to GC physical addresses).
                  */
-                /** todo: we should not flush chunks which include cr3 mappings. */
+                /** @todo We should not flush chunks which include cr3 mappings. */
                 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
                 {
