Commit 1fbf7342 authored by Yi Liu's avatar Yi Liu Committed by Joerg Roedel
Browse files

iommu: Consolidate the ops->remove_dev_pasid usage into a helper



Add a wrapper for the ops->remove_dev_pasid, this consolidates the iommu_ops
fetching and callback invoking. It is also a preparation for starting the
transition from using remove_dev_pasid op to detach pasid to the way using
blocked_domain to detach pasid.

Reviewed-by: default avatarVasant Hegde <vasant.hegde@amd.com>
Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: default avatarYi Liu <yi.l.liu@intel.com>
Link: https://lore.kernel.org/r/20241204122928.11987-3-yi.l.liu@intel.com


Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent fb3de9f9
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -3312,6 +3312,14 @@ bool iommu_group_dma_owner_claimed(struct iommu_group *group)
}
EXPORT_SYMBOL_GPL(iommu_group_dma_owner_claimed);

static void iommu_remove_dev_pasid(struct device *dev, ioasid_t pasid,
				   struct iommu_domain *domain)
{
	const struct iommu_ops *ops = dev_iommu_ops(dev);

	ops->remove_dev_pasid(dev, pasid, domain);
}

static int __iommu_set_group_pasid(struct iommu_domain *domain,
				   struct iommu_group *group, ioasid_t pasid)
{
@@ -3330,11 +3338,9 @@ static int __iommu_set_group_pasid(struct iommu_domain *domain,
err_revert:
	last_gdev = device;
	for_each_group_device(group, device) {
		const struct iommu_ops *ops = dev_iommu_ops(device->dev);

		if (device == last_gdev)
			break;
		ops->remove_dev_pasid(device->dev, pasid, domain);
		iommu_remove_dev_pasid(device->dev, pasid, domain);
	}
	return ret;
}
@@ -3344,12 +3350,9 @@ static void __iommu_remove_group_pasid(struct iommu_group *group,
				       struct iommu_domain *domain)
{
	struct group_device *device;
	const struct iommu_ops *ops;

	for_each_group_device(group, device) {
		ops = dev_iommu_ops(device->dev);
		ops->remove_dev_pasid(device->dev, pasid, domain);
	}
	for_each_group_device(group, device)
		iommu_remove_dev_pasid(device->dev, pasid, domain);
}

/*