Subject: [PATCH v5 0/7] iommu: Standardize ATS robustness and state tracking

From: Pranjal Shrivastava <[email-masked]>
Date: Thu, 28 May 2026 20:23:46 +0000

The primary motivation for this series is an ATS state mismatch observed
under heavy load (via iova_stress). A failure in pci_enable_ats() leaves
IOMMU drivers like arm-smmu-v3 with inconsistent state leading to PCI core
warnings during device detach.

While David's recent work [1] addressed a discovery race for specific
quirked devices by moving them to the HEADER phase, gaps remained
regarding how Virtual Functions (VFs) inherit state from their Physical
Functions (PFs). Specifically, pci_ats_supported() did not account for
PF-level quirked status, and pci_prepare_ats() lacked STU validation for
VFs.

Based on discussion with Jason in v3 it was decided that IOMMU drivers 
should explicitly check pci_ats_supported before calling pci_prepare_ats
To facilitate this, pci_prepare_ats() has been decoupled from the internal
support check. Furthermore, the device probe should fail if pci_prepare_ats()
fails. Since these early gates preclude software configuration errors,
any remaining failure during pci_enable_ats() is treated as a kernel bug

This series standardizes this pattern across ARM SMMUv3, Intel VT-d, &
AMD IOMMU drivers, while also hardening the latter two against pre-existing
issues found by Sashiko in their probe error paths identified during review.

[1] https://lore.kernel.org/linux-pci/[email-masked]/

[v5]
 - Decoupled pci_ats_supported() from pci_prepare_ats() in the PCI core.
 - Rebased SMMUv3 support on top of Nicolin's "Always-On ATS" series.
 - Fixed pre-existing RB-tree corruption in VT-d probe (Baolu/Sashiko).
 - Addressed the pre-existing UAF in AMD IOMMU probe suggested by Sashiko
 - Collected R-b tags from Nicolin.

[v4]
 - https://lore.kernel.org/all/[email-masked]/
 - Standardized the pattern across Intel VT-d and AMD IOMMU drivers.
 - Replaced the SMMUv3 ats_prepared gate with a fatal probe-fail logic.
 - Utilized WARN() macros for runtime enablement failures in all drivers.
 - Collected R-b tags from Jason and Sami.

[v3] https://lore.kernel.org/all/[email-masked]/
[v2] https://lore.kernel.org/all/[email-masked]/

Pranjal Shrivastava (7):
  PCI/ATS: Ensure pci_ats_supported() is PF-aware for VFs
  PCI/ATS: Validate STU for VFs in pci_prepare_ats()
  PCI/ATS: Decouple pci_ats_supported() from pci_prepare_ats()
  iommu/arm-smmu-v3: Standardize ATS enablement failure reporting
  iommu/vt-d: Fix RB-tree corruption and Use-After-Free in probe
  iommu/vt-d: Fail probe on ATS configuration failure
  iommu/amd: Fail probe on ATS configuration failure

 drivers/iommu/amd/iommu.c                   | 30 ++++++++++++++++-----
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 10 +++++--
 drivers/iommu/intel/iommu.c                 | 22 ++++++++++++---
 drivers/pci/ats.c                           | 21 ++++++++++-----
 4 files changed, 64 insertions(+), 19 deletions(-)

-- 
2.54.0.823.g6e5bcc1fc9-goog