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)