From: Igor Mammedov <imammedo@redhat.com>
To: Jean-Philippe Brucker <jean-philippe@linaro.org>
Cc: peter.maydell@linaro.org, ehabkost@redhat.com, mst@redhat.com,
jasowang@redhat.com, richard.henderson@linaro.org,
qemu-devel@nongnu.org, peterx@redhat.com,
shannon.zhaosl@gmail.com, qemu-arm@nongnu.org, ani@anisinha.ca,
pbonzini@redhat.com, eric.auger@redhat.com
Subject: Re: [PATCH v5 04/12] hw/i386/pc: Allow instantiating a virtio-iommu device
Date: Thu, 21 Oct 2021 15:47:09 +0200 [thread overview]
Message-ID: <20211021154709.14da294a@redhat.com> (raw)
In-Reply-To: <20211020172745.620101-5-jean-philippe@linaro.org>
On Wed, 20 Oct 2021 18:27:38 +0100
Jean-Philippe Brucker <jean-philippe@linaro.org> wrote:
> Allow instantiating a virtio-iommu device by adding an ACPI Virtual I/O
> Translation table (VIOT), which describes the relation between the
> virtio-iommu and the endpoints it manages.
>
> 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.
shouldn't above be "IO remapping"?
> 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.
>
> Reviewed-by: Eric Auger <eric.auger@redhat.com>
> Tested-by: Eric Auger <eric.auger@redhat.com>
> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> hw/i386/acpi-build.c | 10 +++++++++-
> hw/i386/pc.c | 16 +++++++++++++++-
> hw/i386/Kconfig | 1 +
> 3 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index ab49e799ff..3ca6cc8118 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -68,9 +68,11 @@
> #include "qom/qom-qobject.h"
> #include "hw/i386/amd_iommu.h"
> #include "hw/i386/intel_iommu.h"
> +#include "hw/virtio/virtio-iommu.h"
>
> #include "hw/acpi/ipmi.h"
> #include "hw/acpi/hmat.h"
> +#include "hw/acpi/viot.h"
>
> /* These are used to size the ACPI tables for -M pc-i440fx-1.7 and
> * -M pc-i440fx-2.0. Even if the actual amount of AML generated grows
> @@ -2488,7 +2490,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
> PCMachineState *pcms = PC_MACHINE(machine);
> PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
> X86MachineState *x86ms = X86_MACHINE(machine);
> - X86IOMMUState *iommu = x86_iommu_get_default();
> + DeviceState *iommu = pcms->iommu;
> GArray *table_offsets;
> unsigned facs, dsdt, rsdt, fadt;
> AcpiPmInfo pm;
> @@ -2613,6 +2615,12 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
> acpi_add_table(table_offsets, tables_blob);
> build_dmar_q35(tables_blob, tables->linker, x86ms->oem_id,
> x86ms->oem_table_id);
> + } else if (object_dynamic_cast(OBJECT(iommu), TYPE_VIRTIO_IOMMU_PCI)) {
> + PCIDevice *pdev = PCI_DEVICE(iommu);
> +
> + acpi_add_table(table_offsets, tables_blob);
> + build_viot(machine, tables_blob, tables->linker, pci_get_bdf(pdev),
> + x86ms->oem_id, x86ms->oem_table_id);
> }
> if (machine->nvdimms_state->is_enabled) {
> nvdimm_build_acpi(table_offsets, tables_blob, tables->linker,
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index fcbf328e8d..f47f7866c7 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -83,6 +83,7 @@
> #include "hw/i386/intel_iommu.h"
> #include "hw/net/ne2000-isa.h"
> #include "standard-headers/asm-x86/bootparam.h"
> +#include "hw/virtio/virtio-iommu.h"
> #include "hw/virtio/virtio-pmem-pci.h"
> #include "hw/virtio/virtio-mem-pci.h"
> #include "hw/mem/memory-device.h"
> @@ -1330,7 +1331,19 @@ 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_X86_IOMMU_DEVICE)) {
> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
> + /* Declare the APIC range as the reserved MSI region */
> + char *resv_prop_str = g_strdup_printf("0xfee00000:0xfeefffff:%d",
> + VIRTIO_IOMMU_RESV_MEM_T_MSI);
> +
> + object_property_set_uint(OBJECT(dev), "len-reserved-regions", 1, errp);
> + object_property_set_str(OBJECT(dev), "reserved-regions[0]",
> + resv_prop_str, errp);
> + g_free(resv_prop_str);
> + }
> +
> + if (object_dynamic_cast(OBJECT(dev), TYPE_X86_IOMMU_DEVICE) ||
> + object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
> PCMachineState *pcms = PC_MACHINE(hotplug_dev);
>
> if (pcms->iommu) {
> @@ -1394,6 +1407,7 @@ static HotplugHandler *pc_get_hotplug_handler(MachineState *machine,
> 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_IOMMU_PCI) ||
> object_dynamic_cast(OBJECT(dev), TYPE_X86_IOMMU_DEVICE)) {
> return HOTPLUG_HANDLER(machine);
> }
> diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
> index 962d2c981b..d22ac4a4b9 100644
> --- a/hw/i386/Kconfig
> +++ b/hw/i386/Kconfig
> @@ -59,6 +59,7 @@ config PC_ACPI
> select ACPI_X86
> select ACPI_CPU_HOTPLUG
> select ACPI_MEMORY_HOTPLUG
> + select ACPI_VIOT
> select SMBUS_EEPROM
> select PFLASH_CFI01
> depends on ACPI_SMBUS
next prev parent reply other threads:[~2021-10-21 13:48 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-20 17:27 [PATCH v5 00/12] virtio-iommu: Add ACPI support Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
2021-10-20 17:27 ` [PATCH v5 01/12] hw/acpi: Add VIOT table Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
2021-10-20 17:27 ` [PATCH v5 02/12] hw/i386/pc: Remove x86_iommu_get_type() Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
2021-10-21 9:02 ` Eric Auger
2021-10-21 13:29 ` Igor Mammedov
2021-10-21 13:29 ` Igor Mammedov
2021-10-20 17:27 ` [PATCH v5 03/12] hw/i386/pc: Move IOMMU singleton into PCMachineState Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
2021-10-21 9:02 ` Eric Auger
2021-10-21 9:02 ` Eric Auger
2021-10-21 13:34 ` Igor Mammedov
2021-10-21 13:34 ` Igor Mammedov
2021-10-20 17:27 ` [PATCH v5 04/12] hw/i386/pc: Allow instantiating a virtio-iommu device Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
2021-10-21 13:47 ` Igor Mammedov [this message]
2021-10-25 11:23 ` Jean-Philippe Brucker
2021-10-20 17:27 ` [PATCH v5 05/12] hw/arm/virt-acpi-build: Add VIOT table for virtio-iommu Jean-Philippe Brucker
2021-10-21 13:49 ` Igor Mammedov
2021-10-21 13:49 ` Igor Mammedov
2021-10-20 17:27 ` [PATCH v5 06/12] hw/arm/virt: Remove device tree restriction " Jean-Philippe Brucker
2021-10-21 13:53 ` Igor Mammedov
2021-10-21 13:53 ` Igor Mammedov
2021-10-20 17:27 ` [PATCH v5 07/12] hw/arm/virt: Reject instantiation of multiple IOMMUs Jean-Philippe Brucker
2021-10-21 13:54 ` Igor Mammedov
2021-10-21 13:54 ` Igor Mammedov
2021-10-20 17:27 ` [PATCH v5 08/12] hw/arm/virt: Use object_property_set instead of qdev_prop_set Jean-Philippe Brucker
2021-10-20 17:27 ` [PATCH v5 09/12] tests/acpi: allow updates of VIOT expected data files Jean-Philippe Brucker
2021-10-21 9:02 ` Eric Auger
2021-10-21 9:02 ` Eric Auger
2021-10-21 14:00 ` Igor Mammedov
2021-10-21 14:00 ` Igor Mammedov
2021-10-20 17:27 ` [PATCH v5 10/12] tests/acpi: add test cases for VIOT Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
2021-10-21 9:02 ` Eric Auger
2021-10-21 9:02 ` Eric Auger
2021-10-26 9:47 ` Jean-Philippe Brucker
2021-10-26 9:47 ` Jean-Philippe Brucker
2021-10-21 9:02 ` Eric Auger
2021-10-21 9:02 ` Eric Auger
2021-10-20 17:27 ` [PATCH v5 11/12] tests/acpi: add expected blob for VIOT test on virt machine Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
2021-10-20 17:27 ` [PATCH v5 12/12] tests/acpi: add expected blobs for VIOT test on q35 machine Jean-Philippe Brucker
2021-10-20 17:27 ` Jean-Philippe Brucker
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=20211021154709.14da294a@redhat.com \
--to=imammedo@redhat.com \
--cc=ani@anisinha.ca \
--cc=ehabkost@redhat.com \
--cc=eric.auger@redhat.com \
--cc=jasowang@redhat.com \
--cc=jean-philippe@linaro.org \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--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.