Index: /trunk/include/VBox/vmm/pdmapi.h
===================================================================
--- /trunk/include/VBox/vmm/pdmapi.h	(revision 80705)
+++ /trunk/include/VBox/vmm/pdmapi.h	(revision 80706)
@@ -277,4 +277,10 @@
      *  PDMDEVREGR0::cbInstanceRC. */
     uint32_t                cbInstanceRC;
+    /** Copy of PDMDEVREGR3::cMaxPciDevices for matching with
+     *  PDMDEVREGR0::cMaxPciDevices. */
+    uint16_t                cMaxPciDevices;
+    /** Copy of PDMDEVREGR3::cMaxMsixVectors for matching with
+     *  PDMDEVREGR0::cMaxMsixVectors. */
+    uint16_t                cMaxMsixVectors;
 
     /** The device instance ordinal. */
Index: /trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp	(revision 80705)
+++ /trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp	(revision 80706)
@@ -1273,28 +1273,36 @@
  * Worker for PDMR0DeviceCreate that does the actual instantiation.
  *
- * Allocates a memory object and devides it up as follows:
+ * Allocates a memory object and divides it up as follows:
  * @verbatim
- *   ----------------------
- *   ring-0 devins
- *   ----------------------
- *   ring-0 instance data
- *   ----------------------
- *   page alignment padding
- *   ----------------------
- *   ring-3 devins
- *   ----------------------
- *   ring-3 instance data
- *   ----------------------
- *  [page alignment padding] -
- *  [----------------------]  \
- *  [raw-mode devins       ]   - Optional, only when raw-mode is enabled.
- *  [----------------------]  /
- *  [raw-mode instance data] -
- *   ----------------------
- *   shared instance data
- *   ----------------------
- *   default crit section
- *   ----------------------
- * @endverbatim
+   -----------------------------------
+   ring-0 devins
+   -----------------------------------
+   ring-0 instance data
+   -----------------------------------
+   ring-0 PCI device data (optional) ?
+   -----------------------------------
+   page alignment padding
+   -----------------------------------
+   ring-3 devins
+   -----------------------------------
+   ring-3 instance data
+   -----------------------------------
+   ring-3 PCI device data (optional) ?
+   -----------------------------------
+  [page alignment padding             ] -
+  [-----------------------------------]  \
+  [raw-mode devins                    ]   \
+  [-----------------------------------]   - Optional, only when raw-mode is enabled.
+  [raw-mode instance data             ]   /
+  [-----------------------------------]  /
+  [raw-mode PCI device data (optional)] -
+   -----------------------------------
+   shared instance data
+   -----------------------------------
+   default crit section
+   -----------------------------------
+   shared PCI device data (optional)
+   -----------------------------------
+   @endverbatim
  *
  * @returns VBox status code.
@@ -1497,4 +1505,7 @@
     AssertReturn(pReq->cbInstanceRC <= _512K, VERR_OUT_OF_RANGE);
     AssertReturn(pReq->iInstance < 1024, VERR_OUT_OF_RANGE);
+    AssertReturn(pReq->iInstance < pReq->cMaxInstances, VERR_OUT_OF_RANGE);
+    AssertReturn(pReq->cMaxPciDevices <= 8, VERR_OUT_OF_RANGE);
+    AssertReturn(pReq->cMaxMsixVectors <= VBOX_MSIX_MAX_ENTRIES, VERR_OUT_OF_RANGE);
 
     /*
@@ -1551,5 +1562,7 @@
                         && pReq->fFlags           == pDevReg->fFlags
                         && pReq->fClass           == pDevReg->fClass
-                        && pReq->cMaxInstances    == pDevReg->cMaxInstances)
+                        && pReq->cMaxInstances    == pDevReg->cMaxInstances
+                        && pReq->cMaxPciDevices   == pDevReg->cMaxPciDevices
+                        && pReq->cMaxMsixVectors  == pDevReg->cMaxMsixVectors)
                     {
                         rc = pdmR0DeviceCreateWorker(pGVM, pDevReg, pReq->iInstance, pReq->fRCEnabled,
@@ -1567,5 +1580,8 @@
                                 "            fFlags: %#x vs %#x\n"
                                 "            fClass: %#x vs %#x\n"
-                                "     cMaxInstances: %#x vs %#x\n",
+                                "     cMaxInstances: %#x vs %#x\n"
+                                "    cMaxPciDevices: %#x vs %#x\n"
+                                "   cMaxMsixVectors: %#x vs %#x\n"
+                                ,
                                 pReq->szDevName,
                                 pReq->uSharedVersion,   pDevReg->uSharedVersion,
@@ -1574,5 +1590,7 @@
                                 pReq->fFlags,           pDevReg->fFlags,
                                 pReq->fClass,           pDevReg->fClass,
-                                pReq->cMaxInstances,    pDevReg->cMaxInstances));
+                                pReq->cMaxInstances,    pDevReg->cMaxInstances,
+                                pReq->cMaxPciDevices,   pDevReg->cMaxPciDevices,
+                                pReq->cMaxMsixVectors,  pDevReg->cMaxMsixVectors));
                         rc = VERR_INCOMPATIBLE_CONFIG;
                     }
Index: /trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp	(revision 80705)
+++ /trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp	(revision 80706)
@@ -350,4 +350,6 @@
             Req.cbInstanceR3     = pReg->cbInstanceCC;
             Req.cbInstanceRC     = pReg->cbInstanceRC;
+            Req.cMaxPciDevices   = pReg->cMaxPciDevices;
+            Req.cMaxMsixVectors  = pReg->cMaxMsixVectors;
             Req.iInstance        = paDevs[i].iInstance;
             Req.fRCEnabled       = fRCEnabled;
