From: "Suthikulpanit, Suravee" <suravee.suthikulpanit@amd.com>
To: "guanghuifeng@linux.alibaba.com" <guanghuifeng@linux.alibaba.com>,
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.K@amd.com, jay.chen@amd.com, Ming.Shu@amd.com,
SooJin.Tan@amd.com, wvw@google.com, wnliu@google.com,
dantuluris@google.com, chriscli@google.com, kpsingh@google.com,
alejandro.j.jimenez@oracle.com, joao.m.martins@oracle.com
Subject: Re: [PATCH v5 13/24] iommu/amd: Program IOMMU DTE with the private IPA domain
Date: Wed, 30 Sep 2026 13:10:27 +0700 [thread overview]
Message-ID: <22befca6-e76a-47e6-9985-c5adc2e60bbe@amd.com> (raw)
In-Reply-To: <6198fec2-05c2-4627-978d-d9e7348364dd@linux.alibaba.com>
On 9/19/2026 10:26 PM, guanghuifeng@linux.alibaba.com wrote:
>> @@ -2770,6 +2810,51 @@ static spinlock_t
>> *amd_iommu_get_top_lock(struct pt_iommu *iommupt)
>> return &pdom->lock;
>> }
>> +#if IS_ENABLED(CONFIG_AMD_IOMMU_IOMMUFD)
>> +/*
>> + * The vIOMMU private IPA domain programs a synthetic DTE for the
>> + * IOMMU's own requester ID so hardware can DMA to backing store.
>> + * That object is not on pdom->dev_list: it is not an IOMMU-API
>> + * attach, and walkers such as rlookup and clone_aliases assume a
>> + * real struct device.
>> + *
>> + * amd_iommu_change_top() therefore misses it. Early maps fit under
>> + * the initial page-table top (PT_FEAT_DYNAMIC_TOP). Later DevID and
>> + * DomID maps at high IPA call increase_top(); the old root stays
>> + * live as a child of the new one, but the self DTE still holds the
>> + * old MODE and would not translate those IOVAs.
>> + *
>> + * Walk iommu_array (from amd_iommu_pdom_bind_iommu()) and rewrite
>> + * iommu->viommu_dev_data when this domain is that IOMMU's private
>> + * IPA table. set_dte_entry() skips clone_aliases() because the
>> + * synthetic DTE has no struct device.
>> + */
>> +static void update_viommu_self_dte(struct protection_domain *pdom,
>> + phys_addr_t top_paddr,
>> + unsigned int top_level)
>> +{
>> + struct pdom_iommu_info *pdom_iommu_info;
>> + unsigned long i;
>> +
>> + lockdep_assert_held(&pdom->lock);
>> +
>> + xa_for_each(&pdom->iommu_array, i, pdom_iommu_info) {
>> + struct amd_iommu *iommu = pdom_iommu_info->iommu;
>> +
>> + if (iommu->viommu_pdom != pdom || !iommu->viommu_dev_data)
>> + continue;
>> + set_dte_entry(iommu, iommu->viommu_dev_data, top_paddr,
>> + top_level);
>> + }
>> +}
>
> Self DTE Mode maybe does not comply with spec requirement of Mode=100b
>
> At initialization time, only the 8MB General Backing Storage region (IPA
> 0x0 - 0x800000) is mapped, so the page table top is likely level 1 or 2,
> resulting in Mode = 010b or 011b.
>
> However, spec Section 2.10.1 states explicitly:
> "The DTE for the IOMMU's DeviceID must be set with V=1, TV=1, GV=0,
> Mode=100b."
>
> This is a hard requirement ("must"), not a recommendation. Mode=100b
> means 4-level page table (48-bit address space), which is necessary
> because the private IPA address map extends up to 48'h0050_0000_0000
> (~5TB), well beyond the 39-bit limit of a 3-level table.
For GstBufferTRPMode=0, the largest IOMMU Private Address =
48'h0050_0000_0000 (39-bit address)
For GstBufferTRPMode=1, the largest IPA = 48'h0028_0000_0000 (38-bit
address)
In both cases, DTE[Mode]=011b (39-bit GPA space) should be sufficient.
I have discussed this with AMD IOMMU hardware designer, and has been
confirmed that 011b should be sufficient. I have also experimented with
DTE[Mode]=011b with the highest possible GID (i.e. 0x7FFF) and do not
see issues.
Please note also that:
* Linux default to 3-level page table initially, and grow the table
level automatically as higher IOVA are mapped.
* Linux supports GstBufferTRPMode=1 only.
The AMD IOMMU spec should restrict to DTE[Mode]=100b. The spec will be
updated in the next revision. I am also adding comment to describe in
patch series v6.
Thanks,
Suravee
next prev parent reply other threads:[~2026-09-30 6:10 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-14 18:47 [PATCH v5 00/24] iommu/amd: Introduce AMD Hardware-accelerated Virtualized IOMMU (vIOMMU) Support Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 01/24] iommu/amd: Introduce vIOMMU-specific events and event Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 02/24] iommu/amd: Introduce EVENT_TYPE_GUEST_EVENT_FAULT Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 03/24] iommu/amd: Detect and initialize AMD vIOMMU feature Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 04/24] iommu/amd: Introduce IOMMUFD vIOMMU support for AMD Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 05/24] iommu/amd: Allocate Guest IDs for IOMMUFD vIOMMU instances Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 06/24] iommu/amd: Map vIOMMU VF and VF Control MMIO BARs Suravee Suthikulpanit
2026-09-22 6:43 ` Guixin Liu
2026-09-28 1:26 ` Suthikulpanit, Suravee
2026-09-14 18:47 ` [PATCH v5 07/24] iommu/amd: Add support for AMD vIOMMU VF MMIO region Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 08/24] iommu/amd: Introduce Reset vMMIO Command Suravee Suthikulpanit
2026-09-19 15:11 ` guanghuifeng
2026-09-21 9:10 ` Suthikulpanit, Suravee
2026-09-14 18:47 ` [PATCH v5 09/24] iommu/amd: Introduce and map vIOMMU private IPA region Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 10/24] iommu/amd: Pass iommu to device_flush_dte() Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 11/24] iommu/amd: Pass iommu and devid to amd_iommu_make_clear_dte() Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 12/24] iommu/amd: Store per-segment iommu_dev_data in an xarray Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 13/24] iommu/amd: Program IOMMU DTE with the private IPA domain Suravee Suthikulpanit
2026-09-19 15:26 ` guanghuifeng
2026-09-30 6:10 ` Suthikulpanit, Suravee [this message]
2026-09-22 6:57 ` Guixin Liu
2026-09-30 9:06 ` Suthikulpanit, Suravee
2026-09-14 18:47 ` [PATCH v5 14/24] iommu/amd: Add per-VM private IPA alloc/map helpers Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 15/24] iommu/amd: Add helper functions to manage DevID / DomID mapping tables Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 16/24] iommu/amd: Add IOMMUFD vDevice and DevID mapping Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 17/24] iommu/amd: Program nested DTE and DomID map on attach Suravee Suthikulpanit
2026-09-22 7:11 ` Guixin Liu
2026-09-28 7:56 ` Suthikulpanit, Suravee
2026-09-14 18:47 ` [PATCH v5 18/24] iommu/amd: Init and clear vIOMMU DevID and DomID maps Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 19/24] iommu/amd: Add per-segment translate device ID pool Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 20/24] iommu/amd: Reserve translate-device-id for PCI requestor aliases Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 21/24] iommu/amd: Add translation DTE and VFctrl TransDevID helpers Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 22/24] iommu/amd: Add translate-device-id alloc/free with vIOMMU owner Suravee Suthikulpanit
2026-09-14 18:47 ` [PATCH v5 23/24] iommu/amd: Assign per-vIOMMU translate device ID Suravee Suthikulpanit
2026-09-22 7:09 ` Guixin Liu
2026-09-28 10:24 ` Suthikulpanit, Suravee
2026-09-14 18:47 ` [PATCH v5 24/24] iommu/amd: Relocate vIOMMU translate-device-id on PCI reserve Suravee Suthikulpanit
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=22befca6-e76a-47e6-9985-c5adc2e60bbe@amd.com \
--to=suravee.suthikulpanit@amd.com \
--cc=Ming.Shu@amd.com \
--cc=Sairaj.K@amd.com \
--cc=SooJin.Tan@amd.com \
--cc=alejandro.j.jimenez@oracle.com \
--cc=chriscli@google.com \
--cc=dantuluris@google.com \
--cc=guanghuifeng@linux.alibaba.com \
--cc=iommu@lists.linux.dev \
--cc=jay.chen@amd.com \
--cc=jgg@nvidia.com \
--cc=joao.m.martins@oracle.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=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 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.