[libvirt] [PATCH v3.5 14/18] qemu: only force an available legacy-PCI slot on domains with pci-root

Laine Stump laine at laine.org
Thu Oct 6 16:04:17 UTC 2016


On 10/06/2016 11:39 AM, Andrea Bolognani wrote:
> On Thu, 2016-09-29 at 10:14 -0400, Laine Stump wrote:
>> Andrea had the right idea when he disabled the "reserve an extra
>> unused slot" bit for aarch64/virt. For *any* PCI Express-based
>> machine, it is pointless since 1) an extra legacy-PCI slot can't be
>> used for hotplug, since hotplug into legacy PCI slots doesn't work on
>> PCI Express machinetypes, and 2) even for "coldplug" expansion,
>> everybody will want to expand using Express controllers, not legacy
>> PCI.
>>   
>> This patch eliminates the extra slot reserve unless the system has a
>> pci-root (i.e. legacy PCI)
> [...]
>> @@ -1704,23 +1702,35 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
>>                                                         addrs) < 0)
>>                goto cleanup;
>>    
>> -        for (i = 0; i < addrs->nbuses; i++) {
>> -            if (!qemuDomainPCIBusFullyReserved(&addrs->buses[i]))
>> -                buses_reserved = false;
>> -        }
>> -
>> -        /* Reserve 1 extra slot for a (potential) bridge only if buses
>> -         * are not fully reserved yet.
>> +        /* For domains that have pci-root, reserve 1 extra slot for a
>> +         * (potential) bridge (for future expansion) only if buses are
>> +         * not fully reserved yet (if all buses are fully reserved
>> +         * with manually/previously assigned addresses, any attempt to
>> +         * reserve an extra slot would fail anyway. But if all buses
>> +         * are *not* fully reserved, this extra reservation might push
>> +         * the config to add a new pci-bridge to plug into the final
>> +         * available slot, thus preserving the ability to expand)
>>             *
>> -         * We don't reserve the extra slot for aarch64 mach-virt guests
>> -         * either because we want to be able to have pure virtio-mmio
>> -         * guests, and reserving this slot would force us to add at least
>> -         * a dmi-to-pci-bridge to an otherwise PCI-free topology
>> +         * We only do this for those domains that have pci-root, since
>> +         * those with pcie-root will usually want to expand using PCIe
>> +         * controllers, which we will do after assigning addresses for
>> +         * all *actual* devices.
>>             */
>> -        if (!buses_reserved &&
>> -            !qemuDomainMachineIsVirt(def) &&
>> -            qemuDomainPCIAddressReserveNextSlot(addrs, &info) < 0)
>> -            goto cleanup;
>> +
>> +        if (qemuDomainMachineHasPCIRoot(def)) {
> Since now you're using info exclusively inside this block,
> you can move its declaration here as well.

Except that patch 19/18 uses it too (it was that patch that led to me 
re-doing this one and posting a v3.5)




More information about the libvir-list mailing list