提交 b7e6f2fc 编写于 作者: E Erik Skultety 提交者: Ján Tomko

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.
上级 5d6904b9
......@@ -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;
}
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册