]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
PCI: Suspend iommu function prior to resetting a device
authorNicolin Chen <nicolinc@nvidia.com>
Mon, 15 Dec 2025 21:42:20 +0000 (13:42 -0800)
committerJoerg Roedel <joerg.roedel@amd.com>
Sat, 10 Jan 2026 09:26:44 +0000 (10:26 +0100)
commitf5b16b802174fe2b67e2b6a27fa793b749981816
treefee6a41d87e57e2e2360a3b9e4a959add4edd930
parentc279e83953d937470f8a6e69b69f62608714f13f
PCI: Suspend iommu function prior to resetting a device

PCIe permits a device to ignore ATS invalidation TLPs while processing a
reset. This creates a problem visible to the OS where an ATS invalidation
command will time out: e.g. an SVA domain will have no coordination with a
reset event and can racily issue ATS invalidations to a resetting device.

The PCIe r6.0, sec 10.3.1 IMPLEMENTATION NOTE recommends SW to disable and
block ATS before initiating a Function Level Reset. It also mentions that
other reset methods could have the same vulnerability as well.

The IOMMU subsystem provides pci_dev_reset_iommu_prepare/done() callback
helpers for this matter. Use them in all the existing reset functions.

This will attach the device to its iommu_group->blocking_domain during the
device reset, so as to allow IOMMU driver to:
 - invoke pci_disable_ats() and pci_enable_ats(), if necessary
 - wait for all ATS invalidations to complete
 - stop issuing new ATS invalidations
 - fence any incoming ATS queries

Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Dheeraj Kumar Srivastava <dheerajkumar.srivastava@amd.com>
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
drivers/pci/pci-acpi.c
drivers/pci/pci.c
drivers/pci/quirks.c