mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
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:
parent
d4cf72af17
commit
0726878297
@ -2248,20 +2248,24 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
for (i = 0; i < def->ncontrollers; i++) {
|
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
|
/* check if every PCI bridge controller's ID is greater than
|
||||||
* the bus it is placed onto
|
* the bus it is placed onto
|
||||||
*/
|
*/
|
||||||
virDomainControllerDefPtr cont = def->controllers[i];
|
if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE &&
|
||||||
int idx = cont->idx;
|
idx <= addr->bus) {
|
||||||
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) {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("failed to create PCI bridge "
|
_("failed to create PCI bridge "
|
||||||
"on bus %d: too many devices with fixed "
|
"on bus %d: too many devices with fixed "
|
||||||
"addresses"),
|
"addresses"),
|
||||||
bus);
|
addr->bus);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user