[PATCH RFC 0/4] iommu/arm-smmu-v3: Support shared Stream IDs
From: Peng Fan (OSS) <hidden>
Date: 2026-09-16 15:08:23
Also in:
linux-iommu, lkml
Some SoCs have a limited number of IOMMU Stream IDs (SIDs) and hardware that inherently shares them. For example, the NXP i.MX95 eDMA controller has 64 channels where each TX/RX pair is assigned a single SID by the hardware - the two channel devices are distinct from Linux's perspective but present the same SID to the SMMU. The current ARM SMMUv3 driver rejects this with: "Aliasing StreamID unsupported, expect DMA to be broken" I took comments in [1] and implement this patchset and only want to support a very simple case that multiple platform devices share one SID. This series adds support for multiple masters to share a single SID, allowing per-channel DMA devices behind an IOMMU without requiring one SID per channel. Patch 1 converts the streams RB tree to an XArray for O(1) SID lookup, simplifying duplicate-SID handling. Patch 2 adds reference counting to streams so that multiple masters can share a SID. Insert increments the refcount; remove either transfers ownership or decrements. A per-SID linked list tracks co-sharing masters. Patch 3 places devices that share a SID into the same IOMMU group, ensuring they share a single IOMMU domain. Patch 4 wires up STE write ordering (first master writes, last master tears down) and gates features that require unambiguous SID-to-device mapping: SVA, IOPF/stall, and vSMMU nesting are disabled for shared-SID masters. [1] https://lore.kernel.org/linux-iommu/DU0PR04MB94172CB3F138AD39E9B6DEEF887F9@DU0PR04MB9417.eurprd04.prod.outlook.com/ (local) Signed-off-by: Peng Fan <peng.fan@nxp.com> --- Peng Fan (4): iommu/arm-smmu-v3: Convert streams from RB tree to XArray iommu/arm-smmu-v3: Support shared SIDs in insert/remove_master iommu/arm-smmu-v3: Group aliasing devices into the same IOMMU group iommu/arm-smmu-v3: Wire up shared-SID STE ordering and feature gating .../iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 4 +- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c | 7 + drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 265 ++++++++++++++++----- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 34 ++- 4 files changed, 247 insertions(+), 63 deletions(-) --- base-commit: e6e35979777d646fe3c7c94dca7dd32fb25d45f4 change-id: 20260916-smmu-shared-sid-e488f6c4d4f0 Best regards, -- Peng Fan [off-list ref]