In order to be able to test for fully reserved PCI buses, assignment of
PCI slots for integrated devices needs to be moved to a separate function.
This also might be a good preparation if we decide to add support for
other chipsets as well.
---
src/qemu/qemu_command.c | 47 ---
1 file changed, 32 insertions(+), 15 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 336a3d3..457c777 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1874,6 +1874,27 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
return ret;
}
+static int
+qemuValidateDevicePCISlotsChipsets(virDomainDefPtr def,
+ virQEMUCapsPtr qemuCaps,
+ virDomainPCIAddressSetPtr addrs)
+{
+if ((STRPREFIX(def-os.machine, pc-0.) ||
+STRPREFIX(def-os.machine, pc-1.) ||
+STRPREFIX(def-os.machine, pc-i440) ||
+STREQ(def-os.machine, pc) ||
+STRPREFIX(def-os.machine, rhel))
+qemuValidateDevicePCISlotsPIIX3(def, qemuCaps, addrs) 0) {
+return -1;
+}
+
+if (qemuDomainMachineIsQ35(def)
+qemuDomainValidateDevicePCISlotsQ35(def, qemuCaps, addrs) 0) {
+return -1;
+}
+
+return 0;
+}
int
qemuDomainAssignPCIAddresses(virDomainDefPtr def,
@@ -1907,6 +1928,10 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
/* 1st pass to figure out how many PCI bridges we need */
if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, true)))
goto cleanup;
+
+if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) 0)
+goto cleanup;
+
if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) 0)
goto cleanup;
@@ -1946,6 +1971,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
goto cleanup;
if (qemuDomainSupportsPCI(def)) {
+if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) 0)
+goto cleanup;
+
if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) 0)
goto cleanup;
}
@@ -1990,6 +2018,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
* - PIIX3 ISA bridge, IDE controller, something else unknown, USB controller
(slot 1)
* - Video (slot 2)
*
+ * - These integrated devices were already added by
+ *qemuValidateDevicePCISlotsChipsets invoked right before this function
+ *
* Incrementally assign slots from 3 onwards:
*
* - Net
@@ -2007,27 +2038,13 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
*/
int
qemuAssignDevicePCISlots(virDomainDefPtr def,
- virQEMUCapsPtr qemuCaps,
+ virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED,
virDomainPCIAddressSetPtr addrs)
{
size_t i, j;
virDomainPCIConnectFlags flags;
virDevicePCIAddress tmp_addr;
-if ((STRPREFIX(def-os.machine, pc-0.) ||
-STRPREFIX(def-os.machine, pc-1.) ||
-STRPREFIX(def-os.machine, pc-i440) ||
-STREQ(def-os.machine, pc) ||
-STRPREFIX(def-os.machine, rhel))
-qemuValidateDevicePCISlotsPIIX3(def, qemuCaps, addrs) 0) {
-goto error;
-}
-
-if (qemuDomainMachineIsQ35(def)
-qemuDomainValidateDevicePCISlotsQ35(def, qemuCaps, addrs) 0) {
-goto error;
-}
-
/* PCI controllers */
for (i = 0; i def-ncontrollers; i++) {
if (def-controllers[i]-type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
--
1.9.3
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list