diff options
| author | Nicolin Chen <nicolinc@nvidia.com> | 2025-10-22 19:21:08 -0700 |
|---|---|---|
| committer | Joerg Roedel <joerg.roedel@amd.com> | 2025-10-27 13:55:35 +0100 |
| commit | 2b33598e666d0c7b761148ffee86140238968861 (patch) | |
| tree | 5dab189ba910518227f81d2069b694801f7bdf0a | |
| parent | c21b34762e2f4a9a255b4ef69a018f8787699bf8 (diff) | |
| download | linux-next-2b33598e666d0c7b761148ffee86140238968861.tar.gz linux-next-2b33598e666d0c7b761148ffee86140238968861.zip | |
iommu: Do not revert set_domain for the last gdev
The last gdev is the device that failed the __iommu_device_set_domain().
So, it doesn't need to be reverted, given it's attached to group->domain
already.
This is not a problem currently, since it's a simply re-attach. However,
the core will need to pass in the old domain to __iommu_device_set_domain
so the old domain pointers would be inconsistent between a failed device
and all its prior succeeded devices, as all the prior devices need to be
reverted.
Avoid the re-attach for the last gdev, by breaking before the revert.
Reviewed-by: Jason Gunthorpe <jgg@nvidia.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>
| -rw-r--r-- | drivers/iommu/iommu.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index adef1a37f931..ce141f095f96 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -2403,6 +2403,9 @@ err_revert: */ last_gdev = gdev; for_each_group_device(group, gdev) { + /* No need to revert the last gdev that failed to set domain */ + if (gdev == last_gdev) + break; /* * A NULL domain can happen only for first probe, in which case * we leave group->domain as NULL and let release clean @@ -2412,8 +2415,6 @@ err_revert: WARN_ON(__iommu_device_set_domain( group, gdev->dev, group->domain, IOMMU_SET_DOMAIN_MUST_SUCCEED)); - if (gdev == last_gdev) - break; } return ret; } |
