On 01/21/2015 05:50 PM, Erik Skultety wrote: > 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 | 45 ++++++++++++++++++++++++++++++--------------- > 1 file changed, 30 insertions(+), 15 deletions(-) > This should be done before fixing the bug in 3/5, and it also doesn't compile. Jan > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 99b06ee..dbcc854 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -1494,6 +1494,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, > if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, true))) > goto cleanup; > > + if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0) > + goto cleanup; > + > for (i = 0; i < nbuses; i++) { > if (qemuDomainPCIBusFullyReserved(&addrs->buses[i])) > resflags |= 1 << i; > @@ -1537,6 +1540,8 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, > goto cleanup; > > if (qemuDomainSupportsPCI(def)) { > + if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0) > + goto cleanup; > if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0) > goto cleanup; > } > @@ -1996,6 +2001,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; > +} > > /* > * This assigns static PCI slots to all configured devices. > @@ -2014,6 +2040,9 @@ qemuDomainValidateDevicePCISlotsQ35(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 > @@ -2031,27 +2060,13 @@ qemuDomainValidateDevicePCISlotsQ35(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) { >
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list