All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
To: Eric Auger <eric.auger@redhat.com>
Cc: peter.maydell@linaro.org, ehabkost@redhat.com, mst@redhat.com,
	richard.henderson@linaro.org, qemu-devel@nongnu.org,
	shannon.zhaosl@gmail.com, qemu-arm@nongnu.org,
	pbonzini@redhat.com, imammedo@redhat.com
Subject: Re: [PATCH v2 7/8] pc: Allow instantiating a virtio-iommu device
Date: Wed, 8 Sep 2021 10:54:06 +0100	[thread overview]
Message-ID: <YTiIPrpDJ3RtrTMf@larix> (raw)
In-Reply-To: <9e656d29-9ead-c095-15b6-3038ac60127a@redhat.com>

On Mon, Sep 06, 2021 at 04:57:39PM +0200, Eric Auger wrote:
> Hi Jean,
> 
> On 9/3/21 4:32 PM, Jean-Philippe Brucker wrote:
> > From: Eric Auger <eric.auger@redhat.com>
> >
> > Add a hotplug handler for virtio-iommu on x86 and set the necessary
> > reserved region property. On x86, the [0xfee00000, 0xfeefffff] DMA
> > region is reserved for MSIs. DMA transactions to this range either
> > trigger IRQ remapping in the IOMMU or bypasses IOMMU translation.
> s/bypasses/bypass.
> > Although virtio-iommu does not support IRQ remapping it must be informed
> > of the reserved region so that it can forward DMA transactions targeting
> > this region.
> 
> >
> > Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Feel free to remove my SoB. I have done much here.
> > Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
> > ---
> >  hw/i386/pc.c | 21 ++++++++++++++++++++-
> >  1 file changed, 20 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> > index 694fc9ce07..c1e1cffe16 100644
> > --- a/hw/i386/pc.c
> > +++ b/hw/i386/pc.c
> > @@ -797,6 +797,11 @@ void pc_machine_done(Notifier *notifier, void *data)
> >                       "irqchip support.");
> >          exit(EXIT_FAILURE);
> >      }
> > +
> > +    if (pcms->virtio_iommu && x86_iommu_get_default()) {
> > +        error_report("QEMU does not support multiple vIOMMUs for x86 yet.");
> > +        exit(EXIT_FAILURE);
> > +    }
> >  }
> 
> I think you shall detect the case of dual instantiation of intel_iommu
> and virtio-iommu.

Those are handled by x86_iommu_set_default() and
pc_machine_device_plug_cb() (below) respectively. I considered factoring
it but I think it just adds complexity.

Thanks,
Jean

> Maybe pc_hotplug_allowed() can be used for that. Note
> that both devices can be refered to in either order.
> >  
> >  void pc_guest_info_init(PCMachineState *pcms)
> > @@ -1376,6 +1381,14 @@ static void pc_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
> >      } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) ||
> >                 object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
> >          pc_virtio_md_pci_pre_plug(hotplug_dev, dev, errp);
> > +    } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
> > +        /* Declare the reserved MSI region */
> > +        char *resv_prop_str = g_strdup_printf("0xfee00000:0xfeefffff:%d",
> > +                                              VIRTIO_IOMMU_RESV_MEM_T_MSI);
> > +
> > +        qdev_prop_set_uint32(dev, "len-reserved-regions", 1);
> > +        qdev_prop_set_string(dev, "reserved-regions[0]", resv_prop_str);
> > +        g_free(resv_prop_str);
> >      }
> >  }
> >  
> > @@ -1393,6 +1406,11 @@ static void pc_machine_device_plug_cb(HotplugHandler *hotplug_dev,
> >          PCMachineState *pcms = PC_MACHINE(hotplug_dev);
> >          PCIDevice *pdev = PCI_DEVICE(dev);
> >  
> > +        if (pcms->virtio_iommu) {
> > +            error_setg(errp,
> > +                       "QEMU does not support multiple vIOMMUs for x86 yet.");
> > +            return;
> > +        }
> >          pcms->virtio_iommu = true;
> >          pcms->virtio_iommu_bdf = pci_get_bdf(pdev);
> >      }
> > @@ -1436,7 +1454,8 @@ static HotplugHandler *pc_get_hotplug_handler(MachineState *machine,
> >      if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) ||
> >          object_dynamic_cast(OBJECT(dev), TYPE_CPU) ||
> >          object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_PMEM_PCI) ||
> > -        object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
> > +        object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI) ||
> > +        object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
> >          return HOTPLUG_HANDLER(machine);
> >      }
> >  
> Thanks
> 
> Eric
> 


  reply	other threads:[~2021-09-08  9:54 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-03 14:32 [PATCH v2 0/8] virtio-iommu: Add ACPI support Jean-Philippe Brucker
2021-09-03 14:32 ` [PATCH v2 1/8] acpi: Add VIOT structure definitions Jean-Philippe Brucker
2021-09-06 12:44   ` Eric Auger
2021-09-03 14:32 ` [PATCH v2 2/8] hw/acpi: Add VIOT table Jean-Philippe Brucker
2021-09-06 12:58   ` Eric Auger
2021-09-08  9:52     ` Jean-Philippe Brucker
2021-09-03 14:32 ` [PATCH v2 3/8] hw/arm/virt-acpi-build: Add VIOT table for virtio-iommu Jean-Philippe Brucker
2021-09-06 14:28   ` Eric Auger
2021-09-03 14:32 ` [PATCH v2 4/8] hw/arm/virt: Remove device tree restriction " Jean-Philippe Brucker
2021-09-06 14:38   ` Eric Auger
2021-09-03 14:32 ` [PATCH v2 5/8] hw/arm/virt: Reject instantiation of multiple IOMMUs Jean-Philippe Brucker
2021-09-06 14:28   ` Eric Auger
2021-09-03 14:32 ` [PATCH v2 6/8] pc: Add VIOT table for virtio-iommu Jean-Philippe Brucker
2021-09-06 15:02   ` Eric Auger
2021-09-08  9:52     ` Jean-Philippe Brucker
2021-09-03 14:32 ` [PATCH v2 7/8] pc: Allow instantiating a virtio-iommu device Jean-Philippe Brucker
2021-09-06 14:57   ` Eric Auger
2021-09-08  9:54     ` Jean-Philippe Brucker [this message]
2021-09-08  9:58       ` Eric Auger
2021-09-03 14:32 ` [PATCH v2 8/8] docs: Add '-device virtio-iommu' entry Jean-Philippe Brucker
2021-09-06 14:41   ` Eric Auger
2021-09-06 14:45   ` Daniel P. Berrangé
2021-09-08 10:14     ` Jean-Philippe Brucker
2021-09-06 15:00   ` Eric Auger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YTiIPrpDJ3RtrTMf@larix \
    --to=jean-philippe@linaro.org \
    --cc=ehabkost@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=shannon.zhaosl@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.