On 2022-04-07 07:26, Christoph Hellwig wrote:
All drivers that implement get_resv_regions just use
generic_put_resv_regions to implement the put side.  Remove the
indirections and document the allocations constraints.

Unfortunately we need to keep this one for now, as the belated IORT RMR support will finally be the first real user[1][2].

Robin.

[1] https://lore.kernel.org/linux-iommu/[email protected]/ [2] https://lore.kernel.org/linux-iommu/[email protected]/

Signed-off-by: Christoph Hellwig <[email protected]>
---
  drivers/iommu/amd/iommu.c                   |  1 -
  drivers/iommu/apple-dart.c                  |  1 -
  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c |  1 -
  drivers/iommu/arm/arm-smmu/arm-smmu.c       |  1 -
  drivers/iommu/intel/iommu.c                 |  1 -
  drivers/iommu/iommu.c                       | 20 +-------------------
  drivers/iommu/mtk_iommu.c                   |  1 -
  drivers/iommu/virtio-iommu.c                |  5 ++---
  include/linux/iommu.h                       |  4 ----
  9 files changed, 3 insertions(+), 32 deletions(-)

diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index a1ada7bff44e61..7011b46022dcbb 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -2279,7 +2279,6 @@ const struct iommu_ops amd_iommu_ops = {
        .probe_finalize = amd_iommu_probe_finalize,
        .device_group = amd_iommu_device_group,
        .get_resv_regions = amd_iommu_get_resv_regions,
-       .put_resv_regions = generic_iommu_put_resv_regions,
        .is_attach_deferred = amd_iommu_is_attach_deferred,
        .pgsize_bitmap  = AMD_IOMMU_PGSIZES,
        .def_domain_type = amd_iommu_def_domain_type,
diff --git a/drivers/iommu/apple-dart.c b/drivers/iommu/apple-dart.c
index decafb07ad0831..a45ad9ade0dba6 100644
--- a/drivers/iommu/apple-dart.c
+++ b/drivers/iommu/apple-dart.c
@@ -771,7 +771,6 @@ static const struct iommu_ops apple_dart_iommu_ops = {
        .of_xlate = apple_dart_of_xlate,
        .def_domain_type = apple_dart_def_domain_type,
        .get_resv_regions = apple_dart_get_resv_regions,
-       .put_resv_regions = generic_iommu_put_resv_regions,
        .pgsize_bitmap = -1UL, /* Restricted during dart probe */
        .default_domain_ops = &(const struct iommu_domain_ops) {
                .attach_dev     = apple_dart_attach_dev,
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c 
b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
index 36461fb46d436c..1ea184bbf750a6 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
@@ -2847,7 +2847,6 @@ static struct iommu_ops arm_smmu_ops = {
        .device_group           = arm_smmu_device_group,
        .of_xlate               = arm_smmu_of_xlate,
        .get_resv_regions       = arm_smmu_get_resv_regions,
-       .put_resv_regions       = generic_iommu_put_resv_regions,
        .dev_enable_feat        = arm_smmu_dev_enable_feature,
        .dev_disable_feat       = arm_smmu_dev_disable_feature,
        .sva_bind               = arm_smmu_sva_bind,
diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c 
b/drivers/iommu/arm/arm-smmu/arm-smmu.c
index 568cce590ccc13..41da1275689ebd 100644
--- a/drivers/iommu/arm/arm-smmu/arm-smmu.c
+++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c
@@ -1589,7 +1589,6 @@ static struct iommu_ops arm_smmu_ops = {
        .device_group           = arm_smmu_device_group,
        .of_xlate               = arm_smmu_of_xlate,
        .get_resv_regions       = arm_smmu_get_resv_regions,
-       .put_resv_regions       = generic_iommu_put_resv_regions,
        .def_domain_type        = arm_smmu_def_domain_type,
        .pgsize_bitmap          = -1UL, /* Restricted during device attach */
        .owner                  = THIS_MODULE,
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index df5c62ecf942b8..cafe50cb484cd5 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -4875,7 +4875,6 @@ const struct iommu_ops intel_iommu_ops = {
        .probe_finalize         = intel_iommu_probe_finalize,
        .release_device         = intel_iommu_release_device,
        .get_resv_regions       = intel_iommu_get_resv_regions,
-       .put_resv_regions       = generic_iommu_put_resv_regions,
        .device_group           = intel_iommu_device_group,
        .dev_enable_feat        = intel_iommu_dev_enable_feat,
        .dev_disable_feat       = intel_iommu_dev_disable_feat,
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 6ce73f35c43aac..2e1f7d1cf74793 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -2584,31 +2584,13 @@ void iommu_get_resv_regions(struct device *dev, struct 
list_head *list)
  }
void iommu_put_resv_regions(struct device *dev, struct list_head *list)
-{
-       const struct iommu_ops *ops = dev_iommu_ops(dev);
-
-       if (ops->put_resv_regions)
-               ops->put_resv_regions(dev, list);
-}
-
-/**
- * generic_iommu_put_resv_regions - Reserved region driver helper
- * @dev: device for which to free reserved regions
- * @list: reserved region list for device
- *
- * IOMMU drivers can use this to implement their .put_resv_regions() callback
- * for simple reservations. Memory allocated for each reserved region will be
- * freed. If an IOMMU driver allocates additional resources per region, it is
- * going to have to implement a custom callback.
- */
-void generic_iommu_put_resv_regions(struct device *dev, struct list_head *list)
  {
        struct iommu_resv_region *entry, *next;
list_for_each_entry_safe(entry, next, list, list)
                kfree(entry);
  }
-EXPORT_SYMBOL(generic_iommu_put_resv_regions);
+EXPORT_SYMBOL(iommu_put_resv_regions);
struct iommu_resv_region *iommu_alloc_resv_region(phys_addr_t start,
                                                  size_t length, int prot,
diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 6fd75a60abd678..d970fd301e8f31 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -688,7 +688,6 @@ static const struct iommu_ops mtk_iommu_ops = {
        .device_group   = mtk_iommu_device_group,
        .of_xlate       = mtk_iommu_of_xlate,
        .get_resv_regions = mtk_iommu_get_resv_regions,
-       .put_resv_regions = generic_iommu_put_resv_regions,
        .pgsize_bitmap  = SZ_4K | SZ_64K | SZ_1M | SZ_16M,
        .owner          = THIS_MODULE,
        .default_domain_ops = &(const struct iommu_domain_ops) {
diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
index 25be4b822aa07f..36385b3deb8981 100644
--- a/drivers/iommu/virtio-iommu.c
+++ b/drivers/iommu/virtio-iommu.c
@@ -964,7 +964,7 @@ static struct iommu_device *viommu_probe_device(struct 
device *dev)
        return &viommu->iommu;
err_free_dev:
-       generic_iommu_put_resv_regions(dev, &vdev->resv_regions);
+       iommu_put_resv_regions(dev, &vdev->resv_regions);
        kfree(vdev);
return ERR_PTR(ret);
@@ -989,7 +989,7 @@ static void viommu_release_device(struct device *dev)
vdev = dev_iommu_priv_get(dev); - generic_iommu_put_resv_regions(dev, &vdev->resv_regions);
+       iommu_put_resv_regions(dev, &vdev->resv_regions);
        kfree(vdev);
  }
@@ -1013,7 +1013,6 @@ static struct iommu_ops viommu_ops = {
        .release_device         = viommu_release_device,
        .device_group           = viommu_device_group,
        .get_resv_regions       = viommu_get_resv_regions,
-       .put_resv_regions       = generic_iommu_put_resv_regions,
        .of_xlate               = viommu_of_xlate,
        .owner                  = THIS_MODULE,
        .default_domain_ops = &(const struct iommu_domain_ops) {
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index a2d3562a501d3e..fed4c09e8e7cfe 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -198,7 +198,6 @@ struct iommu_iotlb_gather {
   *                  group and attached to the groups domain
   * @device_group: find iommu group for a particular device
   * @get_resv_regions: Request list of reserved regions for a device
- * @put_resv_regions: Free list of reserved regions for a device
   * @of_xlate: add OF master IDs to iommu grouping
   * @is_attach_deferred: Check if domain attach should be deferred from iommu
   *                      driver init to device driver init (default no)
@@ -229,7 +228,6 @@ struct iommu_ops {
/* Request/Free a list of reserved regions for a device */
        void (*get_resv_regions)(struct device *dev, struct list_head *list);
-       void (*put_resv_regions)(struct device *dev, struct list_head *list);
int (*of_xlate)(struct device *dev, struct of_phandle_args *args);
        bool (*is_attach_deferred)(struct device *dev);
@@ -445,8 +443,6 @@ extern void iommu_set_fault_handler(struct iommu_domain 
*domain,
extern void iommu_get_resv_regions(struct device *dev, struct list_head *list);
  extern void iommu_put_resv_regions(struct device *dev, struct list_head 
*list);
-extern void generic_iommu_put_resv_regions(struct device *dev,
-                                          struct list_head *list);
  extern void iommu_set_default_passthrough(bool cmd_line);
  extern void iommu_set_default_translated(bool cmd_line);
  extern bool iommu_default_passthrough(void);
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to