qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
To: 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,
	Jean-Philippe Brucker <jean-philippe@linaro.org>,
	qemu-arm@nongnu.org, pbonzini@redhat.com, imammedo@redhat.com
Subject: [PATCH v2 0/8] virtio-iommu: Add ACPI support
Date: Fri,  3 Sep 2021 16:32:01 +0200	[thread overview]
Message-ID: <20210903143208.2434284-1-jean-philippe@linaro.org> (raw)

Allow instantiating a virtio-iommu device on ACPI systems by adding a
Virtual I/O Translation table (VIOT). Enable x86 support for VIOT.

Changes since [v1]:
* Patch 2, use build_append_int_noprefix() to generate the ACPI table.
* Patch 7, check that only one IOMMU is instantiated on x86.
* Added patch 5 that rejects multiple instantations of virtio-iommu on
  Arm. It's not crucial to the series but it matches the check added to
  x86 and is very simple.
* Added patch 8 documenting that interrupt remapping is not supported.

There is an important caveat at the moment: when virtio-iommu is
instantiated, device DMA faults until the guest configures the IOMMU.
Firmware is therefore unable to access storage devices and load the
bootloader and OS. Upcoming patches will align virtio-iommu with other
vIOMMUs and let DMA bypass the IOMMU during boot. In the meantime there
are several ways to circumvent the problem:
* Use plain old virtio-blk as storage, without enabling the
  'iommu_platform' property. DMA from the device bypasses the IOMMU.
* Place the storage device behind a PCI bus that bypasses the IOMMU,
  using the new 'bypass_iommu' bridge property.
  See docs/bypass-iommu.txt
* Use non-PCI storage devices, for example virtio-blk-device on the
  arm64 virt machine.

You can find a description of the VIOT table, which will be included in next
ACPI version, here: https://jpbrucker.net/virtio-iommu/viot/viot-v9.pdf

[v1] https://lore.kernel.org/qemu-devel/20210810084505.2257983-1-jean-philippe@linaro.org/

Eric Auger (1):
  pc: Allow instantiating a virtio-iommu device

Jean-Philippe Brucker (7):
  acpi: Add VIOT structure definitions
  hw/acpi: Add VIOT table
  hw/arm/virt-acpi-build: Add VIOT table for virtio-iommu
  hw/arm/virt: Remove device tree restriction for virtio-iommu
  hw/arm/virt: Reject instantiation of multiple IOMMUs
  pc: Add VIOT table for virtio-iommu
  docs: Add '-device virtio-iommu' entry

 hw/acpi/Kconfig              |   4 ++
 hw/arm/Kconfig               |   1 +
 hw/i386/Kconfig              |   1 +
 hw/acpi/viot.h               |  13 ++++
 include/hw/acpi/acpi-defs.h  |  60 +++++++++++++++++++
 include/hw/i386/pc.h         |   2 +
 hw/acpi/viot.c               | 112 +++++++++++++++++++++++++++++++++++
 hw/arm/virt-acpi-build.c     |   7 +++
 hw/arm/virt.c                |  15 +++--
 hw/i386/acpi-build.c         |   5 ++
 hw/i386/pc.c                 |  28 ++++++++-
 hw/virtio/virtio-iommu-pci.c |   7 ---
 hw/acpi/meson.build          |   1 +
 qemu-options.hx              |   3 +
 14 files changed, 243 insertions(+), 16 deletions(-)
 create mode 100644 hw/acpi/viot.h
 create mode 100644 hw/acpi/viot.c

-- 
2.33.0



             reply	other threads:[~2021-09-03 14:34 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-03 14:32 Jean-Philippe Brucker [this message]
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
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=20210903143208.2434284-1-jean-philippe@linaro.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).