Index: /trunk/src/VBox/VMM/PGMPhys.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMPhys.cpp	(revision 30230)
+++ /trunk/src/VBox/VMM/PGMPhys.cpp	(revision 30231)
@@ -3385,9 +3385,7 @@
     if (pVM->pgm.s.ChunkR3Map.c >= pVM->pgm.s.ChunkR3Map.cMax)
         Req.idChunkUnmap = pgmR3PhysChunkFindUnmapCandidate(pVM);
-/** @todo This is wrong. Any thread in the VM process should be able to do this,
- *        there are depenenecies on this.  What currently saves the day is that
- *        we don't unmap anything and that all non-zero memory will therefore
- *        be present when non-EMTs tries to access it.  */
-    rc = VMMR3CallR0(pVM, VMMR0_DO_GMM_MAP_UNMAP_CHUNK, 0, &Req.Hdr);
+
+    /* Must be callable from any thread, so can't use VMMR3CallR0. */
+    rc = SUPR3CallVMMR0Ex(pVM->pVMR0, pVCpu->idCpu, VMMR0_DO_GMM_MAP_UNMAP_CHUNK, 0, &Req.Hdr);
     if (RT_SUCCESS(rc))
     {
