Index: /trunk/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp	(revision 85860)
+++ /trunk/src/VBox/VMM/VMMR0/PDMR0DevHlp.cpp	(revision 85861)
@@ -1049,4 +1049,7 @@
     AssertLogRelMsgReturn(pIommuReg->u32Version == PDM_IOMMUREGCC_VERSION,
                           ("%#x vs %#x\n", pIommuReg->u32Version, PDM_IOMMUREGCC_VERSION), VERR_VERSION_MISMATCH);
+    AssertPtrReturn(pIommuReg->pfnMemRead, VERR_INVALID_POINTER);
+    AssertPtrReturn(pIommuReg->pfnMemWrite, VERR_INVALID_POINTER);
+    AssertPtrReturn(pIommuReg->pfnMsiRemap, VERR_INVALID_POINTER);
     AssertLogRelMsgReturn(pIommuReg->u32TheEnd == PDM_IOMMUREGCC_VERSION,
                           ("%#x vs %#x\n", pIommuReg->u32TheEnd, PDM_IOMMUREGCC_VERSION), VERR_VERSION_MISMATCH);
@@ -1079,4 +1082,7 @@
     pIommuR0->uPadding0   = 0xdeaddead;
     pIommuR0->pDevInsR0   = pDevIns;
+    pIommuR0->pfnMemRead  = pIommuReg->pfnMemRead;
+    pIommuR0->pfnMemWrite = pIommuReg->pfnMemWrite;
+    pIommuR0->pfnMsiRemap = pIommuReg->pfnMsiRemap;
 
     *ppIommuHlp = &g_pdmR0IommuHlp;
@@ -1560,4 +1566,6 @@
         && pDevInsIommu != pDevIns)
     {
+        AssertMsgReturn(VALID_PTR(pIommu->pfnMsiRemap),
+                        ("pdmR0IoApicHlp_IommuMsiRemap: pfnMsiRemap invalid!\n"), VERR_INVALID_POINTER);
         int rc = pIommu->pfnMsiRemap(pDevInsIommu, uDevId, pMsiIn, pMsiOut);
         if (RT_FAILURE(rc))
