From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
To: <linux-kernel@vger.kernel.org>, <iommu@lists.linux.dev>,
<joro@8bytes.org>, <jgg@nvidia.com>
Cc: <yi.l.liu@intel.com>, <kevin.tian@intel.com>,
<nicolinc@nvidia.com>, <vasant.hegde@amd.com>,
<jon.grimm@amd.com>, <santosh.shukla@amd.com>,
<sairaj.arunkodilkar@amd.com>, <jay.chen@amd.com>,
<wvw@google.com>, <wnliu@google.com>, <dantuluris@google.com>,
<chriscli@google.com>, <kpsingh@google.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Subject: [PATCH 00/22] iommu/amd: Introduce AMD Hardware-accelerated Virtualized IOMMU (vIOMMU) Support
Date: Mon, 30 Mar 2026 08:41:44 +0000 [thread overview]
Message-ID: <20260330084206.9251-1-suravee.suthikulpanit@amd.com> (raw)
AMD IOMMU introduces the vIOMMU feature, which provides partial hardware acceleration
when implementing Guest IOMMUs. This feature provides acceleration for guest Command Buffer,
Event Log, and PPR Log. This eliminates the CPU overhead needed for the supporting HV
intercepts and reduces the latency of these operations.
When a guest attempts to access guest IOMMU MMIO registers with offsets between 8KB and 12KB
(i.e. 3rd 4K region) such as the Command Buffer, Event Log and PPR Log head and tail pointer
registers, this is serviced directly by the IOMMU. When the IOMMU accesses a Command Buffer,
PPR Log or a COMPLETION_WAIT store location in memory, it directly accesses guest physical memory.
The HV/VMM continues trap and to emulate the IOMMU configuration MMIO registers between 0KB
and 4KB (i.e. 1st 4K region), which are primarily used during initialization.
Additionally, the HV must initialize the vIOMMU feature, map MMIO resources between
the VMs and the IOMMU, manage additional supporting data structures in memory (e.g. GPA->SPA
translation DTE, Device ID and Domain ID mapping tables), and allocate/map vIOMMU Private Address
region used as backing storage memory for the IOMMU. Support for new IOMMU command and events
specifically for vIOMMU are also added.
Guest IOMMUs are IOMMUs exposed to VMs with additional support from VMM (QEMU) to generate
guest ACPI IVRS table and define guest PCI topology for IOMMU and pass-through VFIO devices,
which are not covered by this series.
For more detail, please section vIOMMU of the AMD IOMMU Specification[1].
This series is implemented on top of IOMMUFD vIOMMU, vDevice, and HW-queue framework.
It is organized into the following subset of patches:
Patch 1-3 : Preparatory patches
Patch 4-5 : Introduce IOMMUFD vIOMMU support for AMD
Patch 6-8 : Introduce AMD vIOMMU VF MMIO and VFCtrl MMIO
Patch 9-13 : Introduce AMD vIOMMU Private Address support
Patch 14-16 : Introduce IOMMUFD vDevice support for AMD
Patch 17 : Introduce AMD vIOMMU Translation DTE
Patch 18-21 : Introduce IOMMUFD hw_queue support for AMD
Patch 22 : Enable AMD vIOMMU support
Upcoming Series:
* Add Extended Interrupt Remapping support (for guest Event / PPR log interrupts)
* Add Guest Event Injection support
Note:
* This series is rebased on top of v6.19. See [2] for git repo.
[1] IOMMU Specification: https://docs.amd.com/v/u/en-US/48882_3.10_PUB
[2] GIT Repo: https://github.com/AMDESE/linux-iommu/tree/wip/linux-6.19-amd-viommu_upstream_v1
Thank you,
Suravee
Suravee Suthikulpanit (22):
iommu/amd: Make amd_iommu_completion_wait() non-static
iommu/amd: Introduce vIOMMU-specific events and event info
iommu/amd: Detect and initialize AMD vIOMMU feature
iommu/amd: Introduce IOMMUFD vIOMMU support for AMD
iommu/amd: Introduce vIOMMU Guest-ID (GID)
iommu/amd: Map vIOMMU VF MMIO and VF Control MMIO regions
iommu/amd: Add support for AMD vIOMMU VF MMIO region
iommu/amd: Introduce Reset vMMIO Command
iommu/amd: Introduce domain for IOMMU Private Address (IPA) region
iommu/amd: Assign IOMMU Private Address domain to IOMMU
iommu/amd: Allocate and map vIOMMU private regions
iommu/amd: Add helper functions to manage private address region for
each VM
iommu/amd: Add helper functions to manage DevID / DomID mapping tables
iommu/amd: Introduce IOMMUFD vDevice support for AMD
iommu/amd: Introduce helper function for updating domain ID mapping
table
iommu/amd: Introduce helper function for updating device ID mapping
table
iommu/amd: Introduce vIOMMU Translation DTE
iommufd: Introduce iommufd_viommu_ops.hw_queue_init
iommu/amd: Add support for vIOMMU HW queues initialization
iommufd: Introduce vIOMMU option via IOMMU_OPTION ioctl
iommu/amd: Handle set/get option for AMD vIOMMU hw_queue
iommu/amd: Introduce logic to check and enable vIOMMU feature
drivers/iommu/amd/Makefile | 2 +-
drivers/iommu/amd/amd_iommu.h | 26 ++
drivers/iommu/amd/amd_iommu_types.h | 78 ++++
drivers/iommu/amd/amd_viommu.h | 67 ++++
drivers/iommu/amd/init.c | 27 +-
drivers/iommu/amd/iommu.c | 204 ++++++++--
drivers/iommu/amd/iommufd.c | 170 ++++++++
drivers/iommu/amd/nested.c | 18 +
drivers/iommu/amd/vfctrl_mmio.c | 145 +++++++
drivers/iommu/amd/viommu.c | 498 ++++++++++++++++++++++++
drivers/iommu/iommufd/ioas.c | 2 +-
drivers/iommu/iommufd/iommufd_private.h | 1 +
drivers/iommu/iommufd/main.c | 6 +-
drivers/iommu/iommufd/viommu.c | 143 +++++--
include/linux/iommufd.h | 10 +-
include/uapi/linux/iommufd.h | 25 +-
16 files changed, 1343 insertions(+), 79 deletions(-)
create mode 100644 drivers/iommu/amd/amd_viommu.h
create mode 100644 drivers/iommu/amd/vfctrl_mmio.c
create mode 100644 drivers/iommu/amd/viommu.c
--
2.34.1
next reply other threads:[~2026-03-30 8:42 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-30 8:41 Suravee Suthikulpanit [this message]
2026-03-30 8:41 ` [PATCH 01/22] iommu/amd: Make amd_iommu_completion_wait() non-static Suravee Suthikulpanit
2026-03-30 9:39 ` Nicolin Chen
2026-03-30 8:41 ` [PATCH 02/22] iommu/amd: Introduce vIOMMU-specific events and event info Suravee Suthikulpanit
2026-03-30 9:34 ` Nicolin Chen
2026-04-06 3:25 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 03/22] iommu/amd: Detect and initialize AMD vIOMMU feature Suravee Suthikulpanit
2026-03-31 5:12 ` iommu/amd: Initialize IOMMU Private Address (IPA) space mapping region Weinan Liu
2026-04-06 8:32 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 04/22] iommu/amd: Introduce IOMMUFD vIOMMU support for AMD Suravee Suthikulpanit
2026-04-07 6:46 ` [PATCH 4/22] " Weinan Liu
2026-05-12 15:14 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 05/22] iommu/amd: Introduce vIOMMU Guest-ID (GID) Suravee Suthikulpanit
2026-04-07 7:01 ` Weinan Liu
2026-05-12 15:07 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 06/22] iommu/amd: Map vIOMMU VF MMIO and VF Control MMIO regions Suravee Suthikulpanit
2026-03-31 5:30 ` Weinan Liu
2026-04-06 8:57 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 07/22] iommu/amd: Add support for AMD vIOMMU VF MMIO region Suravee Suthikulpanit
2026-03-31 5:55 ` Weinan Liu
2026-04-06 9:03 ` Suthikulpanit, Suravee
2026-03-30 8:41 ` [PATCH 08/22] iommu/amd: Introduce Reset vMMIO Command Suravee Suthikulpanit
2026-04-07 7:20 ` [PATCH 8/22] " Weinan Liu
2026-03-30 8:41 ` [PATCH 09/22] iommu/amd: Introduce domain for IOMMU Private Address (IPA) region Suravee Suthikulpanit
2026-03-30 12:20 ` Jason Gunthorpe
2026-04-06 3:48 ` Suthikulpanit, Suravee
2026-04-06 11:47 ` Jason Gunthorpe
2026-03-30 8:41 ` [PATCH 10/22] iommu/amd: Assign IOMMU Private Address domain to IOMMU Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 11/22] iommu/amd: Allocate and map vIOMMU private regions Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 12/22] iommu/amd: Add helper functions to manage private address region for each VM Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 13/22] iommu/amd: Add helper functions to manage DevID / DomID mapping tables Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 14/22] iommu/amd: Introduce IOMMUFD vDevice support for AMD Suravee Suthikulpanit
2026-03-30 8:41 ` [PATCH 15/22] iommu/amd: Introduce helper function for updating domain ID mapping table Suravee Suthikulpanit
2026-03-30 12:17 ` Jason Gunthorpe
2026-04-06 3:49 ` Suthikulpanit, Suravee
2026-03-30 8:42 ` [PATCH 16/22] iommu/amd: Introduce helper function for updating device " Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 17/22] iommu/amd: Introduce vIOMMU Translation DTE Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 18/22] iommufd: Introduce iommufd_viommu_ops.hw_queue_init Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 19/22] iommu/amd: Add support for vIOMMU HW queues initialization Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 20/22] iommufd: Introduce vIOMMU option via IOMMU_OPTION ioctl Suravee Suthikulpanit
2026-03-30 12:15 ` Jason Gunthorpe
2026-04-06 17:02 ` Suthikulpanit, Suravee
2026-03-30 8:42 ` [PATCH 21/22] iommu/amd: Handle set/get option for AMD vIOMMU hw_queue Suravee Suthikulpanit
2026-03-30 8:42 ` [PATCH 22/22] iommu/amd: Introduce logic to check and enable vIOMMU feature Suravee Suthikulpanit
2026-03-30 12:15 ` Jason Gunthorpe
2026-04-06 3:51 ` Suthikulpanit, Suravee
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=20260330084206.9251-1-suravee.suthikulpanit@amd.com \
--to=suravee.suthikulpanit@amd.com \
--cc=chriscli@google.com \
--cc=dantuluris@google.com \
--cc=iommu@lists.linux.dev \
--cc=jay.chen@amd.com \
--cc=jgg@nvidia.com \
--cc=jon.grimm@amd.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kpsingh@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=sairaj.arunkodilkar@amd.com \
--cc=santosh.shukla@amd.com \
--cc=vasant.hegde@amd.com \
--cc=wnliu@google.com \
--cc=wvw@google.com \
--cc=yi.l.liu@intel.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
all inboxes | Powered by JetHome®