On 01/22/2015 05:00 PM, Ján Tomko wrote: > 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 > I thought about this series as a collection, which did compile just fine, but now I see how silly that was, lesson learned, thank you. Erik >> 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) { >> > > > > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list