Index: /trunk/include/VBox/vmm/gvmm.h
===================================================================
--- /trunk/include/VBox/vmm/gvmm.h	(revision 68000)
+++ /trunk/include/VBox/vmm/gvmm.h	(revision 68001)
@@ -169,4 +169,5 @@
 GVMMR0DECL(int)     GVMMR0ByVM(PVM pVM, PGVM *ppGVM);
 GVMMR0DECL(int)     GVMMR0ByVMAndEMT(PVM pVM, VMCPUID idCpu, PGVM *ppGVM);
+GVMMR0DECL(int)     GVMMR0ValidateGVMandVM(PGVM pGVM, PVM pVM);
 GVMMR0DECL(int)     GVMMR0ValidateGVMandVMandEMT(PGVM pGVM, PVM pVM, VMCPUID idCpu);
 GVMMR0DECL(PVM)     GVMMR0GetVMByHandle(uint32_t hGVM);
Index: /trunk/include/VBox/vmm/pgm.h
===================================================================
--- /trunk/include/VBox/vmm/pgm.h	(revision 68000)
+++ /trunk/include/VBox/vmm/pgm.h	(revision 68001)
@@ -695,5 +695,5 @@
 VMMR0_INT_DECL(int) PGMR0PhysFlushHandyPages(PGVM pGVM, PVM pVM, VMCPUID idCpu);
 VMMR0_INT_DECL(int) PGMR0PhysAllocateLargeHandyPage(PGVM pGVM, PVM pVM, VMCPUID idCpu);
-VMMR0_INT_DECL(int) PGMR0PhysSetupIommu(PVM pVM);
+VMMR0_INT_DECL(int) PGMR0PhysSetupIoMmu(PGVM pGVM, PVM pVM);
 VMMR0DECL(int)      PGMR0SharedModuleCheck(PVM pVM, PGVM pGVM, VMCPUID idCpu, PGMMSHAREDMODULE pModule, PCRTGCPTR64 paRegionsGCPtrs);
 VMMR0DECL(int)      PGMR0Trap0eHandlerNestedPaging(PVM pVM, PVMCPU pVCpu, PGMMODE enmShwPagingMode, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPHYS pvFault);
Index: /trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp	(revision 68000)
+++ /trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp	(revision 68001)
@@ -1883,4 +1883,19 @@
 
 /**
+ * Validates a GVM/VM pair.
+ *
+ * @returns VBox status code.
+ * @param   pGVM        The global (ring-0) VM structure.
+ * @param   pVM         The cross context VM structure.
+ */
+GVMMR0DECL(int) GVMMR0ValidateGVMandVM(PGVM pGVM, PVM pVM)
+{
+    PGVMM pGVMM;
+    return gvmmR0ByGVMandVM(pGVM, pVM, &pGVMM, false /*fTakeUsedLock*/);
+}
+
+
+
+/**
  * Validates a GVM/VM/EMT combo.
  *
Index: /trunk/src/VBox/VMM/VMMR0/PGMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/PGMR0.cpp	(revision 68000)
+++ /trunk/src/VBox/VMM/VMMR0/PGMR0.cpp	(revision 68001)
@@ -77,7 +77,5 @@
     AssertReturn(idCpu < pGVM->cCpus, VERR_INVALID_CPU_ID); /* caller already checked this, but just to be sure. */
     AssertReturn(pGVM->aCpus[idCpu].hEMT == RTThreadNativeSelf(), VERR_NOT_OWNER);
-    PVMCPU pVCpu = &pVM->aCpus[idCpu];
-
-    PGM_LOCK_ASSERT_OWNER_EX(pVM, pVCpu);
+    PGM_LOCK_ASSERT_OWNER_EX(pVM, &pVM->aCpus[idCpu]);
 
     /*
@@ -202,7 +200,5 @@
     AssertReturn(idCpu < pGVM->cCpus, VERR_INVALID_CPU_ID); /* caller already checked this, but just to be sure. */
     AssertReturn(pGVM->aCpus[idCpu].hEMT == RTThreadNativeSelf(), VERR_NOT_OWNER);
-    PVMCPU pVCpu = &pVM->aCpus[idCpu];
-
-    PGM_LOCK_ASSERT_OWNER_EX(pVM, pVCpu);
+    PGM_LOCK_ASSERT_OWNER_EX(pVM, &pVM->aCpus[idCpu]);
 
     /*
@@ -244,8 +240,5 @@
     AssertReturn(idCpu < pGVM->cCpus, VERR_INVALID_CPU_ID); /* caller already checked this, but just to be sure. */
     AssertReturn(pGVM->aCpus[idCpu].hEMT == RTThreadNativeSelf(), VERR_NOT_OWNER);
-    PVMCPU pVCpu = &pVM->aCpus[idCpu];
-
-    PGM_LOCK_ASSERT_OWNER_EX(pVM, pVCpu);
-
+    PGM_LOCK_ASSERT_OWNER_EX(pVM, &pVM->aCpus[idCpu]);
     Assert(!pVM->pgm.s.cLargeHandyPages);
 
@@ -388,10 +381,10 @@
  * @returns VBox status code.
  *
+ * @param   pGVM                The global (ring-0) VM structure.
  * @param   pVM                 The cross context VM structure.
  */
-VMMR0_INT_DECL(int) PGMR0PhysSetupIommu(PVM pVM)
-{
-    PGVM pGVM;
-    int rc = GVMMR0ByVM(pVM, &pGVM);
+VMMR0_INT_DECL(int) PGMR0PhysSetupIoMmu(PGVM pGVM, PVM pVM)
+{
+    int rc = GVMMR0ValidateGVMandVM(pGVM, pVM);
     if (RT_FAILURE(rc))
         return rc;
Index: /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 68000)
+++ /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 68001)
@@ -1655,5 +1655,5 @@
             if (idCpu != 0)
                 return VERR_INVALID_CPU_ID;
-            rc = PGMR0PhysSetupIommu(pVM);
+            rc = PGMR0PhysSetupIoMmu(pGVM, pVM);
             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
             break;
