mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Add check for PCI bridge placement if there are too many PCI devices
Previous patch of this series fixed the issue with adding a new PCI bridge when all the slots were reserved by devices with user specified addresses. In case there are still some PCI devices waiting to get a slot reserved by qemuAssignDevicePCISlots, this means a new bus needs to be created along with a corresponding bridge controller. By adding an additional check, this scenario now results in a reasonable error instead of generating wrong qemu command line.
This commit is contained in:
parent
5d6904b991
commit
b7e6f2fc80
@ -1981,6 +1981,25 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
|||||||
|
|
||||||
if (qemuAssignDevicePCISlots(def, addrs) < 0)
|
if (qemuAssignDevicePCISlots(def, addrs) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
for (i = 0; i < def->ncontrollers; i++) {
|
||||||
|
/* 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) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("failed to create PCI bridge "
|
||||||
|
"on bus %d: too many devices with fixed "
|
||||||
|
"addresses"),
|
||||||
|
bus);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user