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)
|
||||
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