From: Peng Fan <peng.fan@oss.nxp.com>
To: Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
"Joerg Roedel (AMD)" <joro@8bytes.org>,
Jean-Philippe Brucker <jpb@kernel.org>,
Nicolin Chen <nicolinc@nvidia.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
Thierry Reding <thierry.reding@kernel.org>,
Krishna Reddy <vdumpa@nvidia.com>,
Jonathan Hunter <jonathanh@nvidia.com>
Cc: linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev,
linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org,
Peng Fan <peng.fan@nxp.com>
Subject: Re: [PATCH RFC v6 4/5] iommu/arm-smmu-v3: Group aliasing devices into the same IOMMU group
Date: Mon, 12 Oct 2026 20:24:33 +0800 [thread overview]
Message-ID: <aszRgehfo5emwCt+@shlinux89> (raw)
In-Reply-To: <20261011-smmu-shared-sid-v6-4-cb76b89dc612@nxp.com>
On Sun, Oct 11, 2026 at 07:31:28PM +0800, Peng Fan (OSS) wrote:
>From: Peng Fan <peng.fan@nxp.com>
>
>Devices sharing a SID must share a single IOMMU domain (and
>therefore a single cd_table) because the STE can only point to one
>cd_table at a time.
>
>Detect SID aliasing at group-assignment time by looking up the RB
>tree for existing owners. arm_smmu_device_group() is called before
>arm_smmu_insert_master(), so any RB tree hit belongs to a
>different, already-probed master.
As Sashiko pointed, I need correct as below:
Detect SID aliasing at group-assignment time by looking up the RB
tree for existing owners. Since probe_device() inserts the master
before device_group() is called, skip the device's own stream and
look for a different, already-probed master that shares the same
SID.
>
>Assisted-by: LLM
>Signed-off-by: Peng Fan <peng.fan@nxp.com>
>---
> drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 33 ++++++++++++++++++++---------
> 1 file changed, 23 insertions(+), 10 deletions(-)
>
>diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
>index 351ccdfa765b4..328d580935b96 100644
>--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
>+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
>@@ -4572,19 +4572,32 @@ static int arm_smmu_set_dirty_tracking(struct iommu_domain *domain,
>
> static struct iommu_group *arm_smmu_device_group(struct device *dev)
> {
>- struct iommu_group *group;
>+ struct arm_smmu_master *master = dev_iommu_priv_get(dev);
>+ struct arm_smmu_device *smmu = master->smmu;
>+ struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
>+ struct iommu_group *group = NULL;
>+ int i;
>+
>+ mutex_lock(&smmu->streams_mutex);
>+ for (i = 0; i < fwspec->num_ids; i++) {
>+ struct arm_smmu_stream *stream;
>+
>+ stream = arm_smmu_find_stream(smmu, fwspec->ids[i]);
>+ if (!stream)
>+ continue;
Not very sure here, should I use below as check condition?
if (!stream || stream->master == master)
continue?
Per my understanding stream->master will never equals to master,
but Sashiko concerns: Could this logic be adjusted to better handle the
device's own stream?
Thanks
Peng
>+
>+ group = iommu_group_get(stream->master->dev);
>+ break;
>+ }
>+ mutex_unlock(&smmu->streams_mutex);
>+
>+ if (group)
>+ return group;
>
>- /*
>- * We don't support devices sharing stream IDs other than PCI RID
>- * aliases, since the necessary ID-to-device lookup becomes rather
>- * impractical given a potential sparse 32-bit stream ID space.
>- */
> if (dev_is_pci(dev))
>- group = pci_device_group(dev);
>- else
>- group = generic_device_group(dev);
>+ return pci_device_group(dev);
>
>- return group;
>+ return generic_device_group(dev);
> }
>
> static int arm_smmu_of_xlate(struct device *dev,
>
>--
>2.34.1
>
>
next prev parent reply other threads:[~2026-10-12 12:20 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-11 11:31 [PATCH RFC v6 0/5] iommu/arm-smmu-v3: Support shared Stream IDs Peng Fan (OSS)
2026-10-11 11:31 ` [PATCH RFC v6 1/5] iommu/arm-smmu-v3: Allocate streams individually Peng Fan (OSS)
2026-10-11 11:31 ` [PATCH RFC v6 2/5] iommu/arm-smmu-v3: Delay stream allocation to inside the mutex Peng Fan (OSS)
2026-10-12 20:36 ` Nicolin Chen
2026-10-11 11:31 ` [PATCH RFC v6 3/5] iommu/arm-smmu-v3: Support shared SIDs in insert/remove_master Peng Fan (OSS)
2026-10-12 20:48 ` Nicolin Chen
2026-10-11 11:31 ` [PATCH RFC v6 4/5] iommu/arm-smmu-v3: Group aliasing devices into the same IOMMU group Peng Fan (OSS)
2026-10-12 12:24 ` Peng Fan [this message]
2026-10-12 13:05 ` Robin Murphy
2026-10-11 11:31 ` [PATCH RFC v6 5/5] iommu/arm-smmu-v3: Wire up shared-SID STE ordering and feature gating Peng Fan (OSS)
2026-10-12 13:23 ` Peng Fan
2026-10-12 23:54 ` Nicolin Chen
2026-10-13 11:22 ` Robin Murphy
2026-10-13 12:44 ` Jason Gunthorpe
2026-10-13 14:46 ` Peng Fan
2026-10-13 15:14 ` Jason Gunthorpe
2026-10-13 16:23 ` Robin Murphy
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=aszRgehfo5emwCt+@shlinux89 \
--to=peng.fan@oss.nxp.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@ziepe.ca \
--cc=jonathanh@nvidia.com \
--cc=joro@8bytes.org \
--cc=jpb@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=peng.fan@nxp.com \
--cc=robin.murphy@arm.com \
--cc=thierry.reding@kernel.org \
--cc=vdumpa@nvidia.com \
--cc=will@kernel.org \
/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.