diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b56670cda8..25f57f2412 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2261,7 +2261,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, virDomainPCIAddressReserveNextSlot(addrs, &info, flags) < 0) goto cleanup; - if (qemuAssignDevicePCISlots(def, addrs) < 0) + if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; for (i = 1; i < addrs->nbuses; i++) { @@ -2294,7 +2294,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0) goto cleanup; - if (qemuAssignDevicePCISlots(def, addrs) < 0) + if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; for (i = 0; i < def->ncontrollers; i++) { @@ -2426,6 +2426,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, */ int qemuAssignDevicePCISlots(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, virDomainPCIAddressSetPtr addrs) { size_t i, j; @@ -2618,6 +2619,12 @@ qemuAssignDevicePCISlots(virDomainDefPtr def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) continue; + /* Also ignore virtio-mmio disks if our machine allows them */ + if (def->disks[i]->info.type == + VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO)) + continue; + if (def->disks[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("virtio disk cannot have an address of type '%s'"), diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 767d31f0c5..4aa7f2d143 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -284,6 +284,7 @@ virDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def, bool dryRun); int qemuAssignDevicePCISlots(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, virDomainPCIAddressSetPtr addrs); int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps);