* that don't yet have a corresponding controller in the domain
* config.
*/
- if (hasPCIeRoot)
+ if (qemuDomainIsPSeries(def)) {
+ /* pSeries guests should use PHBs (pci-root controllers) */
+ defaultModel = VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT;
+ } else if (hasPCIeRoot) {
defaultModel = VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT;
- else
+ } else {
defaultModel = VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE;
+ }
for (i = 1; i < addrs->nbuses; i++) {
dev.data.controller = def->controllers[contIndex];
/* set connect flags so it will be properly addressed */
qemuDomainFillDevicePCIConnectFlags(def, &dev, qemuCaps, driver);
- if (qemuDomainPCIAddressReserveNextAddr(addrs,
+
+ /* Reserve an address for the controller. pci-root and pcie-root
+ * controllers don't plug into any other PCI controller, hence
+ * they should skip this step */
+ if (bus->model != VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT &&
+ bus->model != VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT &&
+ qemuDomainPCIAddressReserveNextAddr(addrs,
&dev.data.controller->info) < 0) {
goto cleanup;
}
-mon chardev=charmonitor,id=monitor,mode=readline \
-boot c \
-device spapr-pci-host-bridge,index=1,id=pci.2 \
--device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1
+-device spapr-pci-host-bridge,index=2,id=pci.1
DO_TEST("pseries-many-buses-2",
QEMU_CAPS_NODEFCONFIG,
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
- QEMU_CAPS_DEVICE_PCI_BRIDGE,
QEMU_CAPS_VIRTIO_SCSI);
DO_TEST("pseries-hostdevs-1",
QEMU_CAPS_NODEFCONFIG,
<target index='1'/>
</controller>
<controller type='usb' index='0' model='none'/>
- <controller type='pci' index='1' model='pci-bridge'>
- <model name='pci-bridge'/>
- <target chassisNr='1'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
+ <controller type='pci' index='1' model='pci-root'>
+ <model name='spapr-pci-host-bridge'/>
+ <target index='2'/>
</controller>
<memballoon model='none'/>
<panic model='pseries'/>
DO_TEST("pseries-many-buses-2",
QEMU_CAPS_NODEFCONFIG,
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
- QEMU_CAPS_DEVICE_PCI_BRIDGE,
QEMU_CAPS_VIRTIO_SCSI);
DO_TEST("pseries-hostdevs-1",
QEMU_CAPS_NODEFCONFIG,