diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 5cf4b617c6..1aec489263 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1732,11 +1732,12 @@ bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps, if (ARCH_IS_S390(def->os.arch)) return true; - /* If ARM 'virt' supports PCI, it supports multibus. - * No extra conditions here for simplicity. - */ - if (qemuDomainIsARMVirt(def)) + /* If the virt machine, both on ARM and RISC-V, supports PCI, + * then it also supports multibus */ + if (qemuDomainIsARMVirt(def) || + qemuDomainIsRISCVVirt(def)) { return true; + } return false; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5bfe4fe14e..0b8e6fa011 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3380,6 +3380,8 @@ qemuDomainDefAddDefaultDevices(virDomainDefPtr def, case VIR_ARCH_RISCV32: case VIR_ARCH_RISCV64: addDefaultUSB = false; + if (qemuDomainIsRISCVVirt(def)) + addPCIeRoot = virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_GPEX); break; case VIR_ARCH_S390: diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index c376f3f897..c35ecd8585 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -2369,7 +2369,8 @@ qemuDomainSupportsPCI(virDomainDefPtr def, if (STREQ(def->os.machine, "versatilepb")) return true; - if (qemuDomainIsARMVirt(def) && + if ((qemuDomainIsARMVirt(def) || + qemuDomainIsRISCVVirt(def)) && virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_GPEX)) return true;