diff mbox series

[4/6] hw/arm/virt: Remove device tree restriction for virtio-iommu

Message ID 20210810084505.2257983-5-jean-philippe@linaro.org
State Superseded
Headers show
Series virtio-iommu: Add ACPI support | expand

Commit Message

Jean-Philippe Brucker Aug. 10, 2021, 8:45 a.m. UTC
virtio-iommu is now supported with ACPI VIOT as well as device tree.
Remove the restriction that prevents from instantiating a virtio-iommu
device under ACPI.

Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>

---
 hw/arm/virt.c                | 10 ++--------
 hw/virtio/virtio-iommu-pci.c |  7 -------
 2 files changed, 2 insertions(+), 15 deletions(-)

-- 
2.32.0

Comments

Eric Auger Aug. 17, 2021, 1:42 p.m. UTC | #1
Hi Jean,

On 8/10/21 10:45 AM, Jean-Philippe Brucker wrote:
> virtio-iommu is now supported with ACPI VIOT as well as device tree.

> Remove the restriction that prevents from instantiating a virtio-iommu

> device under ACPI.

>

> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>

> ---

>  hw/arm/virt.c                | 10 ++--------

>  hw/virtio/virtio-iommu-pci.c |  7 -------

>  2 files changed, 2 insertions(+), 15 deletions(-)

>

> diff --git a/hw/arm/virt.c b/hw/arm/virt.c

> index 81eda46b0b..b4598d3fe6 100644

> --- a/hw/arm/virt.c

> +++ b/hw/arm/virt.c

> @@ -2551,16 +2551,10 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,

>      MachineClass *mc = MACHINE_GET_CLASS(machine);

>  

>      if (device_is_dynamic_sysbus(mc, dev) ||

> -       (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM))) {

> +        object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) ||

> +        object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {

>          return HOTPLUG_HANDLER(machine);

>      }

> -    if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {

> -        VirtMachineState *vms = VIRT_MACHINE(machine);

> -

> -        if (!vms->bootinfo.firmware_loaded || !virt_is_acpi_enabled(vms)) {

> -            return HOTPLUG_HANDLER(machine);

> -        }

> -    }

>      return NULL;

>  }

>  

> diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c

> index 770c286be7..f30eb16cbf 100644

> --- a/hw/virtio/virtio-iommu-pci.c

> +++ b/hw/virtio/virtio-iommu-pci.c

> @@ -48,16 +48,9 @@ static void virtio_iommu_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)

>      VirtIOIOMMU *s = VIRTIO_IOMMU(vdev);

>  

>      if (!qdev_get_machine_hotplug_handler(DEVICE(vpci_dev))) {

> -        MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());

> -

> -        error_setg(errp,

> -                   "%s machine fails to create iommu-map device tree bindings",

> -                   mc->name);

>          error_append_hint(errp,

>                            "Check your machine implements a hotplug handler "

>                            "for the virtio-iommu-pci device\n");

> -        error_append_hint(errp, "Check the guest is booted without FW or with "

> -                          "-no-acpi\n");

We may check the vms->iommu is not already set to something else (to
VIRT_IOMMU_SMMUV3 for instance).

Thanks

Eric
>          return;

>      }

>      for (int i = 0; i < s->nb_reserved_regions; i++) {
Jean-Philippe Brucker Aug. 27, 2021, 1:29 p.m. UTC | #2
On Tue, Aug 17, 2021 at 03:42:22PM +0200, Eric Auger wrote:
> > diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c

> > index 770c286be7..f30eb16cbf 100644

> > --- a/hw/virtio/virtio-iommu-pci.c

> > +++ b/hw/virtio/virtio-iommu-pci.c

> > @@ -48,16 +48,9 @@ static void virtio_iommu_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)

> >      VirtIOIOMMU *s = VIRTIO_IOMMU(vdev);

> >  

> >      if (!qdev_get_machine_hotplug_handler(DEVICE(vpci_dev))) {

> > -        MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());

> > -

> > -        error_setg(errp,

> > -                   "%s machine fails to create iommu-map device tree bindings",

> > -                   mc->name);

> >          error_append_hint(errp,

> >                            "Check your machine implements a hotplug handler "

> >                            "for the virtio-iommu-pci device\n");

> > -        error_append_hint(errp, "Check the guest is booted without FW or with "

> > -                          "-no-acpi\n");

> We may check the vms->iommu is not already set to something else (to

> VIRT_IOMMU_SMMUV3 for instance).


Since that check is machine specific, virt_machine_device_plug_cb() in
hw/arm/virt.c may be a good place for it. The change feels unrelated to
this series but it's simple enough that I'm tempted to just append the
patch at the end. It also deals with trying to instantiate multiple
virtio-iommu devices, which isn't supported either.

Thanks,
Jean
diff mbox series

Patch

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 81eda46b0b..b4598d3fe6 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -2551,16 +2551,10 @@  static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
     MachineClass *mc = MACHINE_GET_CLASS(machine);
 
     if (device_is_dynamic_sysbus(mc, dev) ||
-       (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM))) {
+        object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) ||
+        object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
         return HOTPLUG_HANDLER(machine);
     }
-    if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
-        VirtMachineState *vms = VIRT_MACHINE(machine);
-
-        if (!vms->bootinfo.firmware_loaded || !virt_is_acpi_enabled(vms)) {
-            return HOTPLUG_HANDLER(machine);
-        }
-    }
     return NULL;
 }
 
diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c
index 770c286be7..f30eb16cbf 100644
--- a/hw/virtio/virtio-iommu-pci.c
+++ b/hw/virtio/virtio-iommu-pci.c
@@ -48,16 +48,9 @@  static void virtio_iommu_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
     VirtIOIOMMU *s = VIRTIO_IOMMU(vdev);
 
     if (!qdev_get_machine_hotplug_handler(DEVICE(vpci_dev))) {
-        MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
-
-        error_setg(errp,
-                   "%s machine fails to create iommu-map device tree bindings",
-                   mc->name);
         error_append_hint(errp,
                           "Check your machine implements a hotplug handler "
                           "for the virtio-iommu-pci device\n");
-        error_append_hint(errp, "Check the guest is booted without FW or with "
-                          "-no-acpi\n");
         return;
     }
     for (int i = 0; i < s->nb_reserved_regions; i++) {