Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 32909)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 32910)
@@ -311,21 +311,4 @@
 }
 
-static uint32_t computeHyperHeapSize(ChipsetType_T chipsetType, uint32_t cCpus, bool fHwVirtExtForced)
-{
-    uint32_t singleCpuBaseSize;
-
-    if (cCpus > 1)
-        return _2M + cCpus * _64K;
-
-    if (chipsetType == ChipsetType_PIIX3)
-    {
-        /* Size must be kept like this for saved state compatibility */
-        return fHwVirtExtForced ? 640*_1K : 1280*_1K;
-    }
-
-
-    return 1280*_1K;
-}
-
 class ConfigError : public iprt::Error
 {
@@ -700,7 +683,6 @@
          */
         PCFGMNODE pMM;
-        uint32_t cbHyperHeap = computeHyperHeapSize(chipsetType, cCpus, fHwVirtExtForced);
         InsertConfigNode(pRoot, "MM", &pMM);
-        InsertConfigInteger(pMM, "cbHyperHeap", cbHyperHeap);
+        InsertConfigInteger(pMM, "CanUseLargerHeap", chipsetType == ChipsetType_ICH9);
 
         /*
Index: /trunk/src/VBox/VMM/MMHyper.cpp
===================================================================
--- /trunk/src/VBox/VMM/MMHyper.cpp	(revision 32909)
+++ /trunk/src/VBox/VMM/MMHyper.cpp	(revision 32910)
@@ -45,4 +45,15 @@
 
 
+DECLINLINE(uint32_t) computeHyperHeapSize(bool fCanUseLargerHeap, uint32_t cCpus, bool fHwVirtExtForced)
+{
+    if (cCpus > 1)
+        return _2M + cCpus * _64K;
+
+    if (fCanUseLargerHeap)
+        return 1280*_1K;
+    else
+        /* Size must be kept like this for saved state compatibility */
+        return fHwVirtExtForced ? 640*_1K : 1280*_1K;
+}
 
 
@@ -73,7 +84,11 @@
      *        precious kernel space on heap for the PATM.
      */
-    uint32_t cbHyperHeap;
-    int rc = CFGMR3QueryU32(CFGMR3GetChild(CFGMR3GetRoot(pVM), "MM"), "cbHyperHeap", &cbHyperHeap);
+    PCFGMNODE pMM = CFGMR3GetChild(CFGMR3GetRoot(pVM), "MM");
+    bool fCanUseLargerHeap = false;
+    int rc = CFGMR3QueryBoolDef(pMM, "CanUseLargerHeap", &fCanUseLargerHeap, false);
+    uint32_t cbHyperHeap = computeHyperHeapSize(fCanUseLargerHeap, pVM->cCpus, VMMIsHwVirtExtForced(pVM));
+    rc = CFGMR3QueryU32Def(pMM, "cbHyperHeap", &cbHyperHeap, cbHyperHeap);
     AssertLogRelRCReturn(rc, rc);
+
     cbHyperHeap = RT_ALIGN_32(cbHyperHeap, PAGE_SIZE);
     LogRel(("MM: cbHyperHeap=%#x (%u)\n", cbHyperHeap, cbHyperHeap));
@@ -1375,3 +1390,2 @@
     }
 }
-
