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

qemu: move PCI slot assignment for PIIX3, Q35 into a separate function

In order to be able to test for fully reserved PCI buses, assignment of
PCI slots for integrated devices needs to be moved to a separate function.
This also might be a good preparation if we decide to add support for
other chipsets as well.
上级 3fb2a692
......@@ -1874,6 +1874,27 @@ qemuDomainValidateDevicePCISlotsQ35(virDomainDefPtr def,
return ret;
}
static int
qemuValidateDevicePCISlotsChipsets(virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
virDomainPCIAddressSetPtr addrs)
{
if ((STRPREFIX(def->os.machine, "pc-0.") ||
STRPREFIX(def->os.machine, "pc-1.") ||
STRPREFIX(def->os.machine, "pc-i440") ||
STREQ(def->os.machine, "pc") ||
STRPREFIX(def->os.machine, "rhel")) &&
qemuValidateDevicePCISlotsPIIX3(def, qemuCaps, addrs) < 0) {
return -1;
}
if (qemuDomainMachineIsQ35(def) &&
qemuDomainValidateDevicePCISlotsQ35(def, qemuCaps, addrs) < 0) {
return -1;
}
return 0;
}
int
qemuDomainAssignPCIAddresses(virDomainDefPtr def,
......@@ -1907,7 +1928,11 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
/* 1st pass to figure out how many PCI bridges we need */
if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, true)))
goto cleanup;
if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0)
if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0)
goto cleanup;
if (qemuAssignDevicePCISlots(def, addrs) < 0)
goto cleanup;
for (i = 0; i < addrs->nbuses; i++) {
......@@ -1946,7 +1971,10 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
goto cleanup;
if (qemuDomainSupportsPCI(def)) {
if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0)
if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0)
goto cleanup;
if (qemuAssignDevicePCISlots(def, addrs) < 0)
goto cleanup;
}
}
......@@ -1990,6 +2018,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
* - PIIX3 ISA bridge, IDE controller, something else unknown, USB controller (slot 1)
* - Video (slot 2)
*
* - These integrated devices were already added by
* qemuValidateDevicePCISlotsChipsets invoked right before this function
*
* Incrementally assign slots from 3 onwards:
*
* - Net
......@@ -2007,27 +2038,12 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
*/
int
qemuAssignDevicePCISlots(virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
virDomainPCIAddressSetPtr addrs)
{
size_t i, j;
virDomainPCIConnectFlags flags;
virDevicePCIAddress tmp_addr;
if ((STRPREFIX(def->os.machine, "pc-0.") ||
STRPREFIX(def->os.machine, "pc-1.") ||
STRPREFIX(def->os.machine, "pc-i440") ||
STREQ(def->os.machine, "pc") ||
STRPREFIX(def->os.machine, "rhel")) &&
qemuValidateDevicePCISlotsPIIX3(def, qemuCaps, addrs) < 0) {
goto error;
}
if (qemuDomainMachineIsQ35(def) &&
qemuDomainValidateDevicePCISlotsQ35(def, qemuCaps, addrs) < 0) {
goto error;
}
/* PCI controllers */
for (i = 0; i < def->ncontrollers; i++) {
if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
......
......@@ -249,7 +249,6 @@ virDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
bool dryRun);
int qemuAssignDevicePCISlots(virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
virDomainPCIAddressSetPtr addrs);
int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册