All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vasant Hegde <vasant.hegde@amd.com>
To: Suravee Suthikulpanit <suravee.suthikulpanit@amd.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,
	jon.grimm@amd.com, santosh.shukla@amd.com, Sairaj.K@amd.com,
	jay.chen@amd.com, Ming.Shu@amd.com, SooJin.Tan@amd.com,
	chrisl@kernel.org, wvw@google.com, wnliu@google.com,
	dantuluris@google.com, kpsingh@google.com,
	alejandro.j.jimenez@oracle.com, joao.m.martins@oracle.com,
	guanghuifeng@linux.alibaba.com
Subject: Re: [PATCH v6 22/24] iommu/amd: Add translate-device-id alloc/free with vIOMMU owner
Date: Wed, 21 Oct 2026 12:03:20 +0530	[thread overview]
Message-ID: <dfc3edc2-534e-47fd-ab3d-2a66e57e47bb@amd.com> (raw)
In-Reply-To: <20260930092344.5616-23-suravee.suthikulpanit@amd.com>



On 9/30/2026 2:53 PM, Suravee Suthikulpanit wrote:
> Extend the per-segment translate-device-id pool to record the owning
> struct amd_iommu_viommu in the xarray.  Add amd_iommu_trans_devid_alloc()
> and amd_iommu_trans_devid_free() to allocate ids from last_bdf down
> to 0 so each id indexes the device and alias tables, then return them
> on teardown.  Free loads the xarray slot and erases it only when the
> owner matches @aviommu.

AI (Claude Opus 5.5) generated comment (seems correct, copy-pasting as is)


The pool marks a RID as used only if it went through
amd_iommu_probe_device() (plus its PCI DMA aliases) or is the IOMMU
itself.  Are there RIDs the hardware uses that never reach
probe_device()?  For example:

  - IOAPIC/HPET RIDs from IVRS special device entries


With this patch there are two per-segment xarrays indexed by the same
thing, a device table slot: pci_seg->dev_data_xa and
pci_seg->trans_devid_xa.  The translate dev_data and the IOMMU's own
dev_data are kept out of dev_data_xa, and that breaks the DTE locking.
The interrupt remapping code finds the DTE lock by devid:

        static void set_dte_irq_entry(struct amd_iommu *iommu, u16 devid,
                                      struct irq_remap_table *table)
        {
                ...
                struct iommu_dev_data *dev_data = search_dev_data(iommu, devid);

                if (dev_data)
                        spin_lock(&dev_data->dte_lock);

                new = READ_ONCE(dte->data[2]);
                ...
                WRITE_ONCE(dte->data[2], new);

For a translate slot search_dev_data() returns NULL, so this
read-modify-write of data[2] runs without a lock while
write_dte_upper128() may be updating the same word under
trans_dev_data->dte_lock.  That can happen as soon as the pool hands
out a RID that also has an IRQ remapping table, such as an IOAPIC or
HPET RID that is not reserved today.

Could the two xarrays be merged into a single per-segment "DTE slot
owner" table? Something like:

  empty                       free, the translate allocator may use it
  xa_mk_value(RESERVED)       used by hardware but has no dev_data
                              (IVRS IOAPIC/HPET/ACPIHID, IVHD entries
                              not yet enumerated)
  struct iommu_dev_data *     the driver programs this DTE; an owner
                              field says host device, alias, IOMMU
                              self, or vIOMMU translate (with the
                              aviommu pointer)


My comment:

I did some analysis and may be having single xa_array makes it easy to maintain.
Any free slot in dev_data_xa is free for translation DTE. We can have additional
flag in dev_data to track the translation devid vs actual devid. So that we can
add checks to catch allocaton/free bugs. What do you think?


-Vasant




  reply	other threads:[~2026-10-21  6:33 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-30  9:23 [PATCH v6 00/24] iommu/amd: Introduce AMD Hardware-accelerated Virtualized IOMMU (vIOMMU) Support Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 01/24] iommu/amd: Introduce vIOMMU-specific events and event Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 02/24] iommu/amd: Introduce EVENT_TYPE_GUEST_EVENT_FAULT Suravee Suthikulpanit
2026-10-19  6:10   ` Vasant Hegde
2026-10-22  5:32     ` Suthikulpanit, Suravee
2026-09-30  9:23 ` [PATCH v6 03/24] iommu/amd: Detect and initialize AMD vIOMMU feature Suravee Suthikulpanit
2026-10-19  6:40   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 04/24] iommu/amd: Introduce IOMMUFD vIOMMU support for AMD Suravee Suthikulpanit
2026-09-30 21:44   ` Nicolin Chen
2026-09-30  9:23 ` [PATCH v6 05/24] iommu/amd: Allocate Guest IDs for IOMMUFD vIOMMU instances Suravee Suthikulpanit
2026-10-19 11:15   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 06/24] iommu/amd: Map vIOMMU VF and VF Control MMIO BARs Suravee Suthikulpanit
2026-10-19 11:28   ` Vasant Hegde
2026-10-19 17:06   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 07/24] iommu/amd: Add support for AMD vIOMMU VF MMIO region Suravee Suthikulpanit
2026-10-19 11:38   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 08/24] iommu/amd: Introduce Reset vMMIO Command Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 09/24] iommu/amd: Introduce and map vIOMMU private IPA region Suravee Suthikulpanit
2026-10-19 14:06   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 10/24] iommu/amd: Pass iommu to device_flush_dte() Suravee Suthikulpanit
2026-10-19 17:14   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 11/24] iommu/amd: Pass iommu and devid to amd_iommu_make_clear_dte() Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 12/24] iommu/amd: Store per-segment iommu_dev_data in an xarray Suravee Suthikulpanit
2026-10-19 13:39   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 13/24] iommu/amd: Program IOMMU DTE with the private IPA domain Suravee Suthikulpanit
2026-10-19 16:58   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 14/24] iommu/amd: Add per-VM private IPA alloc/map helpers Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 15/24] iommu/amd: Add helper functions to manage DevID / DomID mapping tables Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 16/24] iommu/amd: Add IOMMUFD vDevice and DevID mapping Suravee Suthikulpanit
2026-10-15 23:39   ` Jason Gunthorpe
2026-10-21  5:15   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 17/24] iommu/amd: Program nested DTE and DomID map on attach Suravee Suthikulpanit
2026-10-15 23:39   ` Jason Gunthorpe
2026-10-21  5:26   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 18/24] iommu/amd: Init and clear vIOMMU DevID and DomID maps Suravee Suthikulpanit
2026-10-15 23:39   ` Jason Gunthorpe
2026-10-20 16:00     ` Suthikulpanit, Suravee
2026-10-20 16:50       ` Jason Gunthorpe
2026-10-21  5:28         ` Suthikulpanit, Suravee
2026-10-21  5:29   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 19/24] iommu/amd: Add per-segment translate device ID pool Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 20/24] iommu/amd: Reserve translate-device-id for PCI requestor aliases Suravee Suthikulpanit
2026-09-30  9:23 ` [PATCH v6 21/24] iommu/amd: Add translation DTE and VFctrl TransDevID helpers Suravee Suthikulpanit
2026-10-21  6:15   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 22/24] iommu/amd: Add translate-device-id alloc/free with vIOMMU owner Suravee Suthikulpanit
2026-10-21  6:33   ` Vasant Hegde [this message]
2026-09-30  9:23 ` [PATCH v6 23/24] iommu/amd: Assign per-vIOMMU translate device ID Suravee Suthikulpanit
2026-10-21 10:06   ` Vasant Hegde
2026-09-30  9:23 ` [PATCH v6 24/24] iommu/amd: Relocate vIOMMU translate-device-id on PCI reserve Suravee Suthikulpanit
2026-10-21 10:09   ` Vasant Hegde
2026-10-15 12:33 ` [PATCH v6 00/24] iommu/amd: Introduce AMD Hardware-accelerated Virtualized IOMMU (vIOMMU) Support Guixin Liu

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=dfc3edc2-534e-47fd-ab3d-2a66e57e47bb@amd.com \
    --to=vasant.hegde@amd.com \
    --cc=Ming.Shu@amd.com \
    --cc=Sairaj.K@amd.com \
    --cc=SooJin.Tan@amd.com \
    --cc=alejandro.j.jimenez@oracle.com \
    --cc=chrisl@kernel.org \
    --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=suravee.suthikulpanit@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.