Message ID | 20210810084505.2257983-5-jean-philippe@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | virtio-iommu: Add ACPI support | expand |
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++) {
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 --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++) {
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(-)