Index: /trunk/src/VBox/VMM/PGMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PGMInternal.h	(revision 27487)
+++ /trunk/src/VBox/VMM/PGMInternal.h	(revision 27488)
@@ -715,4 +715,6 @@
  * This is a page that's shared with other VMs. */
 #define PGM_PAGE_STATE_SHARED           3
+/** The page is ballooned, so no longer available for this VM. */
+#define PGM_PAGE_STATE_BALLOONED        4
 /** @} */
 
@@ -819,4 +821,10 @@
 #define PGM_PAGE_IS_SHARED(pPage)           ( (pPage)->uStateY == PGM_PAGE_STATE_SHARED )
 
+/**
+ * Checks if the page is ballooned.
+ * @returns true/false.
+ * @param   pPage       Pointer to the physical guest page tracking structure.
+ */
+#define PGM_PAGE_IS_BALLOONED(pPage)            ( (pPage)->uStateY == PGM_PAGE_STATE_BALLOONED )
 
 /**
@@ -3350,5 +3358,4 @@
 void            pgmPhysPageMakeWriteMonitoredWritable(PVM pVM, PPGMPAGE pPage);
 int             pgmPhysPageMakeWritable(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys);
-int             pgmPhysPageMakeWritableUnlocked(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys);
 int             pgmPhysPageMakeWritableAndMap(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void **ppv);
 int             pgmPhysPageMap(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void **ppv);
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 27487)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 27488)
@@ -807,5 +807,5 @@
                         Log(("PGM #PF: Make writable: %RGp %R[pgmpage] pvFault=%RGp uErr=%#x\n",
                              GCPhys, pPage, pvFault, uErr));
-                        rc = pgmPhysPageMakeWritableUnlocked(pVM, pPage, GCPhys);
+                        rc = pgmPhysPageMakeWritable(pVM, pPage, GCPhys);
                         if (rc != VINF_SUCCESS)
                         {
@@ -1410,5 +1410,5 @@
                 &&  PGM_PAGE_GET_TYPE(pPage)  == PGMPAGETYPE_RAM)
             {
-                rc = pgmPhysPageMakeWritableUnlocked(pVM, pPage, PteSrc.u & GST_PTE_PG_MASK);
+                rc = pgmPhysPageMakeWritable(pVM, pPage, PteSrc.u & GST_PTE_PG_MASK);
                 AssertRC(rc);
             }
@@ -1797,5 +1797,5 @@
                         &&  PGM_PAGE_GET_TYPE(pPage)  == PGMPAGETYPE_RAM)
                     {
-                        rc = pgmPhysPageMakeWritableUnlocked(pVM, pPage, GCPhys);
+                        rc = pgmPhysPageMakeWritable(pVM, pPage, GCPhys);
                         AssertRC(rc);
                     }
@@ -2381,5 +2381,5 @@
                                     && PGM_PAGE_GET_TYPE(pPage)  == PGMPAGETYPE_RAM)
                                 {
-                                    rc = pgmPhysPageMakeWritableUnlocked(pVM, pPage, pPteSrc->u & GST_PTE_PG_MASK);
+                                    rc = pgmPhysPageMakeWritable(pVM, pPage, pPteSrc->u & GST_PTE_PG_MASK);
                                     AssertRC(rc);
                                 }
@@ -2814,5 +2814,5 @@
                             &&  PGM_PAGE_GET_TYPE(pPage)  == PGMPAGETYPE_RAM)
                         {
-                            rc = pgmPhysPageMakeWritableUnlocked(pVM, pPage, GCPhys);
+                            rc = pgmPhysPageMakeWritable(pVM, pPage, GCPhys);
                             AssertRCReturn(rc, rc);
                             if (VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY))
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp	(revision 27487)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllPhys.cpp	(revision 27488)
@@ -652,4 +652,5 @@
 int pgmPhysPageMakeWritable(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys)
 {
+    Assert(PGMIsLockOwner(pVM));
     switch (PGM_PAGE_GET_STATE(pPage))
     {
@@ -673,28 +674,4 @@
             return pgmPhysAllocPage(pVM, pPage, GCPhys);
     }
-}
-
-
-/**
- * Wrapper for pgmPhysPageMakeWritable which enters the critsect.
- *
- * @returns VBox strict status code.
- * @retval  VINF_SUCCESS on success.
- * @retval  VINF_PGM_SYNC_CR3 on success and a page pool flush is pending.
- * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
- *
- * @param   pVM         The VM address.
- * @param   pPage       The physical page tracking structure.
- * @param   GCPhys      The address of the page.
- */
-int pgmPhysPageMakeWritableUnlocked(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys)
-{
-    int rc = pgmLock(pVM);
-    if (RT_SUCCESS(rc))
-    {
-        rc = pgmPhysPageMakeWritable(pVM, pPage, GCPhys);
-        pgmUnlock(pVM);
-    }
-    return rc;
 }
 
