From: Jason Gunthorpe <jgg@nvidia.com>
To: "Suthikulpanit, Suravee" <suravee.suthikulpanit@amd.com>
Cc: nicolinc@nvidia.com, linux-kernel@vger.kernel.org,
robin.murphy@arm.com, will@kernel.org, joro@8bytes.org,
kevin.tian@intel.com, jsnitsel@redhat.com, vasant.hegde@amd.com,
iommu@lists.linux.dev, santosh.shukla@amd.com,
sairaj.arunkodilkar@amd.com, jon.grimm@amd.com,
prashanthpra@google.com, wvw@google.com, wnliu@google.com,
gptran@google.com, kpsingh@google.com, joao.m.martins@oracle.com,
alejandro.j.jimenez@oracle.com
Subject: Re: [PATCH v2 11/12] iommu/amd: Add support for nested domain attach/detach
Date: Tue, 7 Oct 2025 20:43:13 -0300 [thread overview]
Message-ID: <20251007234313.GE3474167@nvidia.com> (raw)
In-Reply-To: <3e27de73-61a1-4977-b0a1-629ffaa81032@amd.com>
On Tue, Oct 07, 2025 at 02:22:30PM -0500, Suthikulpanit, Suravee wrote:
>
>
> On 10/6/2025 9:59 AM, Jason Gunthorpe wrote:
> > On Wed, Oct 01, 2025 at 06:09:53AM +0000, Suravee Suthikulpanit wrote:
> > > ....
> > > + if (WARN_ON(!ndom || !pdom || (pdom->iop.mode == PAGE_MODE_NONE)))
> > > + return;
> > > +
> > > + amd_iommu_make_clear_dte(dev_data, &new);
> > > +
> > > + new.data[0] |= iommu_virt_to_phys(pdom->iop.root);
> > > + new.data[0] |= FIELD_PREP(DTE_MODE_MASK, pdom->iop.mode);
> > > + new.data[0] |= DTE_FLAG_IR | DTE_FLAG_IW | DTE_FLAG_TV;
> > > + new.data[0] |= (DTE_FLAG_PPR & gdte->data[0]);
> >
> > > + if (pdom->dirty_tracking)
> > > + new.data[0] |= DTE_FLAG_HAD;
> > > +
> > > + if (dev_data->ats_enabled)
> > > + new.data[1] |= DTE_FLAG_IOTLB;
> >
> > This sequence should be in some set_dte_gcr3() ??
>
> Not sure what you mean. This logic was in set_dte_entry(), and duplicated
> here in the set_dte_nested() since we no longer calling set_dte_entry() from
> the nested path. Also, it's not really related to GCR3 table.
Sorry some make_ste_v1()
This logic should be the same for any v1 page table.
> > > + /*
> > > + * Restore cached persistent DTE bits, which can be set by information
> > > + * in IVRS table. See set_dev_entry_from_acpi().
> > > + */
> > > + initial_dte = amd_iommu_get_ivhd_dte_flags(iommu->pci_seg->id, dev_data->devid);
> > > + if (initial_dte) {
> > > + new.data128[0] |= initial_dte->data128[0];
> > > + new.data128[1] |= initial_dte->data128[1];
> > > + }
> >
> > This should go into amd_iommu_make_clear_dte() I think, and refactor
> > it out of iommu_update_dte256() ?
> > Every created DTE needs these bits set, right?
>
> Currently, the amd_iommu_make_clear_dte() clears all the DTE bits and set
> the DTE[V] (valid) bit. This is used when preparing the DTE for programming,
> detaching domain, and when setting the blocking domain. Putting this logic
> in the function would change the behavior.
Yes, but it seems like that is the right behavior?
> These bits affect Interrupt remapping (Lint0/Lint1/NMI/INIT/ExtInt interrupt
> pass-through) and System management message behavior.
Because these bits shouldn't be cleared on a blocking domain!
Interrupts are still expected to work.
> > > +
> > > + /* Guest translation stuff */
> > > + new.data[0] |= (gdte->data[0] &
> > > + (DTE_GLX | DTE_FLAG_GV | DTE_FLAG_GIOV));
> > > +
> > > + /* GCR3 table */
> > > + new.data[0] |= (gdte->data[0] & DTE_GCR3_14_12);
> > > + new.data[1] |= (gdte->data[1] & (DTE_GCR3_30_15 | DTE_GCR3_51_31));
> > > +
> > > + /* Guest paging mode */
> > > + new.data[2] |= (gdte->data[2] & DTE_GPT_LEVEL_MASK);
> >
> > I didn't see anything validating gdte has only permitted set bits in
> > the prior patch?
>
> Not sure which on are you referring to.
You have to validate gdte has only valid bits.
> > If this is goint to decode array item by item then why not use struct
> > iommu_hwpt_amd_guest in the nested_domain ?
>
> The struct dev_table_entry *gdte is basically the same information as in the
> struct iommu_hwpt_amd_guest.dte that we copied from the userspace into the
> more appropriate in-kernel data structure type, which is used within the
> driver.
The appropriate type is the userspace type if you don't actually ever
use anything unique to the kernel type. You can avoid the special
assert/etc since this way of accessing it is not sensitive to layout.
> Here, we just select only what we needed for configuring guest page table
> specifically to be programmed onto the host DTE.
Everything you don't pick up should be checked to be 0. VMM needs to
filter out unsuopported things or generate a bad DTE error.
Jason
next prev parent reply other threads:[~2025-10-07 23:43 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-01 6:09 [PATCH v2 00/12] iommu/amd: Introduce Nested Translation support Suravee Suthikulpanit
2025-10-01 6:09 ` [PATCH v2 01/12] iommu/amd: Rename DEV_DOMID_MASK to DTE_DOMID_MASK Suravee Suthikulpanit
2025-10-02 17:12 ` Nicolin Chen
2025-10-06 14:36 ` Jason Gunthorpe
2025-10-01 6:09 ` [PATCH v2 02/12] iommu/amd: Make amd_iommu_pdom_id_alloc() non-static Suravee Suthikulpanit
2025-10-02 17:12 ` Nicolin Chen
2025-10-01 6:09 ` [PATCH v2 03/12] iommu/amd: Make amd_iommu_pdom_id_free() non-static Suravee Suthikulpanit
2025-10-02 17:13 ` Nicolin Chen
2025-10-06 14:37 ` Jason Gunthorpe
2025-10-01 6:09 ` [PATCH v2 04/12] iommu/amd: Make amd_iommu_device_flush_dte() non-static Suravee Suthikulpanit
2025-10-02 17:14 ` Nicolin Chen
2025-10-06 14:37 ` Jason Gunthorpe
2025-10-01 6:09 ` [PATCH v2 05/12] iommu/amd: Make amd_iommu_update_dte256() non-static Suravee Suthikulpanit
2025-10-02 17:15 ` Nicolin Chen
2025-10-01 6:09 ` [PATCH v2 06/12] iommu/amd: Make amd_iommu_make_clear_dte() non-static inline Suravee Suthikulpanit
2025-10-02 17:17 ` Nicolin Chen
2025-10-01 6:09 ` [PATCH v2 07/12] iommu/amd: Make amd_iommu_completion_wait() non-static Suravee Suthikulpanit
2025-10-02 17:24 ` Nicolin Chen
2025-10-01 6:09 ` [PATCH v2 08/12] iommufd: Introduce data struct for AMD nested domain allocation Suravee Suthikulpanit
2025-10-02 17:31 ` Nicolin Chen
2025-10-01 6:09 ` [PATCH v2 09/12] iommu/amd: Add support for nest parent " Suravee Suthikulpanit
2025-10-02 18:00 ` Nicolin Chen
2025-10-06 14:43 ` Jason Gunthorpe
2025-10-08 14:16 ` Suthikulpanit, Suravee
2025-10-01 6:09 ` [PATCH v2 10/12] iommu/amd: Add support for nested " Suravee Suthikulpanit
2025-10-02 18:29 ` Nicolin Chen
2025-10-06 14:49 ` Jason Gunthorpe
2025-10-07 20:36 ` Suthikulpanit, Suravee
2025-10-07 23:39 ` Jason Gunthorpe
2025-10-09 6:22 ` Sairaj Kodilkar
2025-10-09 9:16 ` Sairaj Kodilkar
2025-10-09 14:34 ` Jason Gunthorpe
2025-10-01 6:09 ` [PATCH v2 11/12] iommu/amd: Add support for nested domain attach/detach Suravee Suthikulpanit
2025-10-02 19:04 ` Nicolin Chen
2025-10-06 14:59 ` Jason Gunthorpe
2025-10-07 19:22 ` Suthikulpanit, Suravee
2025-10-07 23:43 ` Jason Gunthorpe [this message]
2025-10-09 7:18 ` Sairaj Kodilkar
2025-10-09 14:35 ` Jason Gunthorpe
2025-10-01 6:09 ` [PATCH v2 12/12] iommu/amd: Introduce IOMMUFD vIOMMU support for AMD Suravee Suthikulpanit
2025-10-02 20:05 ` Nicolin Chen
2025-10-06 15:01 ` Jason Gunthorpe
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=20251007234313.GE3474167@nvidia.com \
--to=jgg@nvidia.com \
--cc=alejandro.j.jimenez@oracle.com \
--cc=gptran@google.com \
--cc=iommu@lists.linux.dev \
--cc=joao.m.martins@oracle.com \
--cc=jon.grimm@amd.com \
--cc=joro@8bytes.org \
--cc=jsnitsel@redhat.com \
--cc=kevin.tian@intel.com \
--cc=kpsingh@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=prashanthpra@google.com \
--cc=robin.murphy@arm.com \
--cc=sairaj.arunkodilkar@amd.com \
--cc=santosh.shukla@amd.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=vasant.hegde@amd.com \
--cc=will@kernel.org \
--cc=wnliu@google.com \
--cc=wvw@google.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.