mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: fix qemuDomainSupportsPCI() for ARM machines of "virt" machinetype
Commit e8d5517 updated the domain post-parse to automatically add pcie-root et al for certain ARM "virt" machinetypes, but didn't update the function qemuDomainSupportsPCI() which is called later on when we are auto-assigning PCI addresses and default settings for the PCI controller <model> and <target> attributes. The result was that PCI addresses weren't assigned, and the controllers didn't have their attribute default values set, leading to an error when the domain was started, e.g.: internal error: autogenerated dmi-to-pci-bridge options not set This patch adds the same check made in the earlier patch to qemuDomainSupportsPCI(), so that PCI address auto-assignment and target/model default values will be set.
This commit is contained in:
parent
fbb27088ee
commit
9bd16ad3b4
@ -1742,7 +1742,7 @@ qemuCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
qemuDomainSupportsPCI(virDomainDefPtr def)
|
qemuDomainSupportsPCI(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
|
||||||
{
|
{
|
||||||
if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64))
|
if ((def->os.arch != VIR_ARCH_ARMV7L) && (def->os.arch != VIR_ARCH_AARCH64))
|
||||||
return true;
|
return true;
|
||||||
@ -1750,6 +1750,11 @@ qemuDomainSupportsPCI(virDomainDefPtr def)
|
|||||||
if (STREQ(def->os.machine, "versatilepb"))
|
if (STREQ(def->os.machine, "versatilepb"))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if ((STREQ(def->os.machine, "virt") ||
|
||||||
|
STRPREFIX(def->os.machine, "virt-")) &&
|
||||||
|
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_GPEX))
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2267,7 +2272,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
|||||||
if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, false)))
|
if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses, false)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (qemuDomainSupportsPCI(def)) {
|
if (qemuDomainSupportsPCI(def, qemuCaps)) {
|
||||||
if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0)
|
if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
@ -1093,6 +1093,9 @@ qemuDomainDefPostParse(virDomainDefPtr def,
|
|||||||
def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, 0, -1) < 0)
|
def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, 0, -1) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
/* NB: any machine that sets addPCIRoot to true must also return
|
||||||
|
* true from the function qemuDomainSupportsPCI().
|
||||||
|
*/
|
||||||
if (addPCIRoot &&
|
if (addPCIRoot &&
|
||||||
virDomainDefMaybeAddController(
|
virDomainDefMaybeAddController(
|
||||||
def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 0,
|
def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 0,
|
||||||
@ -1102,6 +1105,9 @@ qemuDomainDefPostParse(virDomainDefPtr def,
|
|||||||
/* When a machine has a pcie-root, make sure that there is always
|
/* When a machine has a pcie-root, make sure that there is always
|
||||||
* a dmi-to-pci-bridge controller added as bus 1, and a pci-bridge
|
* a dmi-to-pci-bridge controller added as bus 1, and a pci-bridge
|
||||||
* as bus 2, so that standard PCI devices can be connected
|
* as bus 2, so that standard PCI devices can be connected
|
||||||
|
*
|
||||||
|
* NB: any machine that sets addPCIeRoot to true must also return
|
||||||
|
* true from the function qemuDomainSupportsPCI().
|
||||||
*/
|
*/
|
||||||
if (addPCIeRoot) {
|
if (addPCIeRoot) {
|
||||||
if (virDomainDefMaybeAddController(
|
if (virDomainDefMaybeAddController(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user