Index: /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
===================================================================
--- /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp	(revision 30040)
+++ /trunk/src/VBox/Devices/VMMDev/VMMDev.cpp	(revision 30041)
@@ -1838,4 +1838,19 @@
                 pRequestHeader->rc = VINF_SUCCESS;
             }
+            break;
+        }
+
+        case VMMDevReq_DebugIsPageShared:
+        {
+# ifdef DEBUG
+            VMMDevPageIsSharedRequest *pReq = (VMMDevPageIsSharedRequest *)pRequestHeader;
+
+            if (pRequestHeader->size != sizeof(VMMDevPageIsSharedRequest))
+                pRequestHeader->rc = VERR_INVALID_PARAMETER;
+            else
+                pRequestHeader->rc = PGMR3SharedModuleGetPageState(PDMDevHlpGetVM(pDevIns), pReq->GCPtrPage, &pReq->fShared, &pReq->fReadWrite);
+# else
+            pRequestHeader->rc = VERR_NOT_IMPLEMENTED;
+# endif
             break;
         }
Index: /trunk/src/VBox/VMM/PGMSharedPage.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMSharedPage.cpp	(revision 30040)
+++ /trunk/src/VBox/VMM/PGMSharedPage.cpp	(revision 30041)
@@ -176,2 +176,40 @@
 #endif
 }
+
+/**
+ * Query the state of a page in a shared module
+ *
+ * @returns VBox status code.
+ * @param   pVM                 VM handle
+ * @param   GCPtrPage           Page address
+ * @param   pfShared            Shared status (out)
+ * @param   pfReadWrite         Read/write status (out)
+ */
+VMMR3DECL(int) PGMR3SharedModuleGetPageState(PVM pVM, RTGCPTR GCPtrPage, bool *pfShared, bool *pfReadWrite)
+{
+#if defined(VBOX_WITH_PAGE_SHARING) && defined(DEBUG)
+    /* Debug only API for the page fusion testcase. */
+    RTGCPHYS GCPhys;
+    uint64_t fFlags;
+
+    pgmLock(pVM);
+
+    int rc = PGMGstGetPage(VMMGetCpu(pVM), GCPtrPage, &fFlags, &GCPhys);
+    if (rc == VINF_SUCCESS)
+    {
+        PPGMPAGE pPage = pgmPhysGetPage(&pVM->pgm.s, GCPhys);
+        if (pPage)
+        {
+            *pfShared    = PGM_PAGE_IS_SHARED(pPage);
+            *pfReadWrite = !!(fFlags & X86_PTE_RW);
+        }
+        else
+            rc = VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS;
+    }
+
+    pgmUnlock(pVM);
+    return rc;
+#else
+    return VERR_NOT_IMPLEMENTED;
+#endif
+}
