mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 03:11:11 -04:00
iommu: Fix ATS invalidation timeouts during __iommu_remove_group_pasid()
If a device is blocked, its PASID domains are already detached. Repeating
iommu_remove_dev_pasid() is unnecessary and might trigger ATS invalidation
timeouts.
Skip the iommu_remove_dev_pasid() call upon gdev->blocked.
Fixes: c279e83953 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()")
Cc: stable@vger.kernel.org
Closes: https://sashiko.dev/#/patchset/20260407194644.171304-1-nicolinc%40nvidia.com
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
committed by
Joerg Roedel
parent
0d5fd7a932
commit
fc3523b16d
@@ -3602,7 +3602,12 @@ static void __iommu_remove_group_pasid(struct iommu_group *group,
|
||||
struct group_device *device;
|
||||
|
||||
for_each_group_device(group, device) {
|
||||
if (device->dev->iommu->max_pasids > 0)
|
||||
/*
|
||||
* A group-level detach cannot fail, even if there is a blocked
|
||||
* device. In fact, blocked devices must be already detached for
|
||||
* a pending device recovery.
|
||||
*/
|
||||
if (!device->blocked && device->dev->iommu->max_pasids > 0)
|
||||
iommu_remove_dev_pasid(device->dev, pasid, domain);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user