qemu: reorganize loop in qemuDomainAssignPCIAddresses

This loop occurs just after we've assured that all devices that
require a PCI device have been assigned and all necessary PCI
controllers have been added. It is the perfect place to add other
potentially auto-generated PCI controller attributes that are
dependent on the controller's PCI address (upcoming patch).

There is a convenient loop through all controllers at the end of the
function, but the patch to add new functionality will be cleaner if we
first rearrange that loop a bit.

Note that the loop originally was accessing info.addr.pci.bus prior to
determining that the pci part of the object was valid. This isn't
dangerous in any way, but seemed a bit ugly, so I fixed it.
This commit is contained in:
Laine Stump 2015-06-25 12:02:32 -04:00
parent d4cf72af17
commit 0726878297

View File

@ -2248,20 +2248,24 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
goto cleanup;
for (i = 0; i < def->ncontrollers; i++) {
virDomainControllerDefPtr cont = def->controllers[i];
int idx = cont->idx;
virDevicePCIAddressPtr addr;
if (cont->type != VIR_DOMAIN_CONTROLLER_TYPE_PCI)
continue;
addr = &cont->info.addr.pci;
/* check if every PCI bridge controller's ID is greater than
* the bus it is placed onto
*/
virDomainControllerDefPtr cont = def->controllers[i];
int idx = cont->idx;
int bus = cont->info.addr.pci.bus;
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&
cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE &&
idx <= bus) {
if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE &&
idx <= addr->bus) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("failed to create PCI bridge "
"on bus %d: too many devices with fixed "
"addresses"),
bus);
addr->bus);
goto cleanup;
}
}