[libvirt] [PATCH v2 06/11] qemu: assign addresses to virtio devices on RISC-V

Lubomir Rintel posted 11 patches 7 years ago
Only 10 patches received!
There is a newer version of this series
[libvirt] [PATCH v2 06/11] qemu: assign addresses to virtio devices on RISC-V
Posted by Lubomir Rintel 7 years ago
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
---
 src/qemu/qemu_domain_address.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 01cfdbeadf..d3259212f5 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -502,6 +502,23 @@ qemuDomainAssignARMVirtioMMIOAddresses(virDomainDefPtr def,
 }
 
 
+static void
+qemuDomainAssignRISCVVirtioMMIOAddresses(virDomainDefPtr def,
+                                         virQEMUCapsPtr qemuCaps)
+{
+    if (!ARCH_IS_RISCV(def->os.arch))
+        return;
+
+    if (STRNEQ(def->os.machine, "virt"))
+        return;
+
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO)) {
+        qemuDomainPrimeVirtioDeviceAddresses(def,
+                                             VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO);
+    }
+}
+
+
 /**
  * qemuDomainDeviceCalculatePCIConnectFlags:
  *
@@ -2940,6 +2957,8 @@ qemuDomainAssignAddresses(virDomainDefPtr def,
 
     qemuDomainAssignARMVirtioMMIOAddresses(def, qemuCaps);
 
+    qemuDomainAssignRISCVVirtioMMIOAddresses(def, qemuCaps);
+
     if (qemuDomainAssignPCIAddresses(def, qemuCaps, driver, obj) < 0)
         return -1;
 
-- 
2.17.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 06/11] qemu: assign addresses to virtio devices on RISC-V
Posted by Andrea Bolognani 7 years ago
On Thu, 2018-06-14 at 22:32 +0200, Lubomir Rintel wrote:
[...]
> +static void
> +qemuDomainAssignRISCVVirtioMMIOAddresses(virDomainDefPtr def,
> +                                         virQEMUCapsPtr qemuCaps)
> +{
> +    if (!ARCH_IS_RISCV(def->os.arch))
> +        return;
> +
> +    if (STRNEQ(def->os.machine, "virt"))
> +        return;

This will stop working the moment QEMU introduces versioned
machine types for RISC-V, which makes it not very future proof.

You should instead introduce (in a separate, earlier patch)

  qemuDomainIsRISCVVirt()
  qemuDomainMachineIsRISCVVirt()

functions modeled after the Arm equivalent, and use the former
here.

[...]
> @@ -2940,6 +2957,8 @@ qemuDomainAssignAddresses(virDomainDefPtr def,
>  
>      qemuDomainAssignARMVirtioMMIOAddresses(def, qemuCaps);
>  
> +    qemuDomainAssignRISCVVirtioMMIOAddresses(def, qemuCaps);

We should have a

  qemuDomainAssignVirtioMMIOAddresses()

wrapper that calls both the Arm and RISC-V variants, and call
that one from qemuDomainAssignAddresses().

You can introduce and start using the wrapper in a separate patch;
then, in this one, you can add the RISC-V variant and modify the
wrapper so that it calls it in addition to the Arm variant.

Everything else looks good.

-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list