From: Andrea Bolognani Date: Tue, 8 Jul 2025 20:27:02 +0000 (+0200) Subject: qemu: Fix PCI/USB handling for Arm realview boards X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b38fb62e2e2997fa2f7aa0a5266a054189c51adf;p=thirdparty%2Flibvirt.git qemu: Fix PCI/USB handling for Arm realview boards Only the -eb variants of the realview board support PCI devices, so those are the only ones that should automatically get a USB controller (addDefaultUSB). libvirt will currently add one for the other realview variants too, but that will result in QEMU reporting an error due to lack of PCI support as soon as the domain is started. Additionally, they should get a PCI controller added automatically (addPCIRoot) too, same as versatilepb. Finally, qemuDomainSupportsPCI() should correctly report the fact that these machine types support PCI. As a consequence of these fixes, the USB controllers now correctly get assigned PCI addresses across the board. Signed-off-by: Andrea Bolognani Reviewed-by: Michal Privoznik Reviewed-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e45757ccd5..81a8ca906d 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -7688,7 +7688,8 @@ qemuDomainSupportsPCI(const virDomainDef *def) * machine types support PCI */ if (ARCH_IS_ARM(def->os.arch)) { if (qemuDomainIsARMVirt(def) || - STREQ(def->os.machine, "versatilepb")) { + STREQ(def->os.machine, "versatilepb") || + STRPREFIX(def->os.machine, "realview-eb")) { return true; } return false; diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index 5f59b79d56..3c481ead5e 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -1291,13 +1291,11 @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver, case VIR_ARCH_ARMV7L: case VIR_ARCH_ARMV7B: case VIR_ARCH_AARCH64: - if (STREQ(def->os.machine, "versatilepb")) - addPCIRoot = true; - - /* Add default USB for the two machine types which historically - * supported -usb */ + /* Add default PCI and USB for the two machine types which + * historically supported -usb */ if (STREQ(def->os.machine, "versatilepb") || - STRPREFIX(def->os.machine, "realview")) { + STRPREFIX(def->os.machine, "realview-eb")) { + addPCIRoot = true; addDefaultUSB = true; if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI)) usbModel = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI; diff --git a/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.args b/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.args index fc88d9cf6b..0d956241fc 100644 --- a/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.args +++ b/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.args @@ -25,7 +25,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-aarch64test/.config \ -rtc base=utc \ -no-shutdown \ -boot strict=on \ --device '{"driver":"pci-ohci","id":"usb"}' \ +-device '{"driver":"pci-ohci","id":"usb","bus":"pci","addr":"0x1"}' \ -audiodev '{"id":"audio1","driver":"none"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.xml b/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.xml index b16454b94c..c31c7b2bbc 100644 --- a/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.xml +++ b/tests/qemuxmlconfdata/aarch64-realview-minimal.aarch64-latest.abi-update.xml @@ -15,7 +15,10 @@ destroy /usr/bin/qemu-system-aarch64 - + +
+ +