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, ani@anisinha.ca,
imammedo@redhat.com
Subject: [PATCH v3 00/10] virtio-iommu: Add ACPI support
Date: Tue, 14 Sep 2021 15:19:55 +0100 [thread overview]
Message-ID: <20210914142004.2433568-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 v2 [1]:
* Use acpi_table_begin() and acpi_table_end().
This series now depends on "acpi: refactor error prone build_header()
and packed structures usage in ACPI tables" [2]
* Dropped ACPI header definitions.
* Dropped doc patch, to be revisited later.
* Squashed patch 5.
* Added tests for q35 and virt machines: patch 6 temporarily enables
blob updates (for bisectability), patch 7 adds the two test cases and
patches 8-10 add the three reference tables.
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
[1] https://lore.kernel.org/qemu-devel/20210903143208.2434284-1-jean-philippe@linaro.org/
[2] https://lore.kernel.org/qemu-devel/20210907144814.741785-1-imammedo@redhat.com/
Jean-Philippe Brucker (10):
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: Allow instantiating a virtio-iommu device
tests/acpi: allow updates of VIOT expected data files
tests/acpi: add test cases for VIOT
tests/acpi: add expected VIOT blob for virt machine
tests/acpi: add expected DSDT blob for VIOT test on q35
tests/acpi: add expected VIOT blob for q35 machine
hw/acpi/viot.h | 13 ++++
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 ---
tests/qtest/bios-tables-test.c | 39 ++++++++++++
hw/acpi/Kconfig | 4 ++
hw/acpi/meson.build | 1 +
hw/arm/Kconfig | 1 +
hw/i386/Kconfig | 1 +
tests/data/acpi/q35/DSDT.viot | Bin 0 -> 9415 bytes
tests/data/acpi/q35/VIOT.viot | Bin 0 -> 112 bytes
tests/data/acpi/virt/VIOT | Bin 0 -> 88 bytes
16 files changed, 219 insertions(+), 16 deletions(-)
create mode 100644 hw/acpi/viot.h
create mode 100644 hw/acpi/viot.c
create mode 100644 tests/data/acpi/q35/DSDT.viot
create mode 100644 tests/data/acpi/q35/VIOT.viot
create mode 100644 tests/data/acpi/virt/VIOT
--
2.33.0
next reply other threads:[~2021-09-14 14:53 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-14 14:19 Jean-Philippe Brucker [this message]
2021-09-14 14:19 ` [PATCH v3 01/10] hw/acpi: Add VIOT table Jean-Philippe Brucker
2021-09-16 12:44 ` Eric Auger
2021-09-20 8:06 ` Igor Mammedov
2021-10-01 15:30 ` Jean-Philippe Brucker
2021-09-20 8:35 ` Igor Mammedov
2021-09-14 14:19 ` [PATCH v3 02/10] hw/arm/virt-acpi-build: Add VIOT table for virtio-iommu Jean-Philippe Brucker
2021-09-14 14:19 ` [PATCH v3 03/10] hw/arm/virt: Remove device tree restriction " Jean-Philippe Brucker
2021-09-14 14:19 ` [PATCH v3 04/10] hw/arm/virt: Reject instantiation of multiple IOMMUs Jean-Philippe Brucker
2021-09-16 12:45 ` Eric Auger
2021-09-20 8:11 ` Igor Mammedov
2021-09-14 14:20 ` [PATCH v3 05/10] pc: Allow instantiating a virtio-iommu device Jean-Philippe Brucker
2021-09-20 8:24 ` Igor Mammedov
2021-10-01 15:36 ` Jean-Philippe Brucker
2021-09-14 14:20 ` [PATCH v3 06/10] tests/acpi: allow updates of VIOT expected data files Jean-Philippe Brucker
2021-09-14 14:20 ` [PATCH v3 07/10] tests/acpi: add test cases for VIOT Jean-Philippe Brucker
2021-09-20 8:39 ` Igor Mammedov
2021-10-01 15:37 ` Jean-Philippe Brucker
2021-09-14 14:20 ` [PATCH v3 08/10] tests/acpi: add expected VIOT blob for virt machine Jean-Philippe Brucker
2021-09-14 14:20 ` [PATCH v3 09/10] tests/acpi: add expected DSDT blob for VIOT test on q35 Jean-Philippe Brucker
2021-09-14 14:20 ` [PATCH v3 10/10] tests/acpi: add expected VIOT blob for q35 machine Jean-Philippe Brucker
2021-09-20 8:29 ` Igor Mammedov
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=20210914142004.2433568-1-jean-philippe@linaro.org \
--to=jean-philippe@linaro.org \
--cc=ani@anisinha.ca \
--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.