put_iova_spaces() asserts that the caller already holds the VM and object
locks, but is not named accordingly.  Both of the callers which do not
hold those locks yet -- msm_gem_close() and msm_gem_vma_put() -- open-code
the same lock, tear down, unlock sequence around it.

Rename it to put_iova_spaces_locked() and give the plain name to a wrapper
taking both locks, mirroring the get_and_pin_iova_range_locked() /
msm_gem_get_and_pin_iova_range() pair in the same file.  No functional
change.

Assisted-by: LLM
Signed-off-by: Dmitry Baryshkov <[email protected]>
---
 drivers/gpu/drm/msm/msm_gem.c | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index c4cff3d53d81..f90afffe3442 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -47,13 +47,23 @@ static int msm_gem_open(struct drm_gem_object *obj, struct 
drm_file *file)
        return 0;
 }
 
+static void put_iova_spaces_locked(struct drm_gem_object *obj,
+                                  struct drm_gpuvm *vm, bool close,
+                                  const char *reason);
+
 static void put_iova_spaces(struct drm_gem_object *obj, struct drm_gpuvm *vm,
-                           bool close, const char *reason);
+                           bool close, const char *reason)
+{
+       struct drm_exec exec;
+
+       msm_gem_lock_vm_and_obj(&exec, obj, vm);
+       put_iova_spaces_locked(obj, vm, close, reason);
+       drm_exec_fini(&exec);     /* drop locks */
+}
 
 static void msm_gem_close(struct drm_gem_object *obj, struct drm_file *file)
 {
        struct msm_context *ctx = file->driver_priv;
-       struct drm_exec exec;
 
        update_ctx_mem(file, -obj->size);
        msm_gem_vma_put(obj);
@@ -81,9 +91,7 @@ static void msm_gem_close(struct drm_gem_object *obj, struct 
drm_file *file)
        dma_resv_wait_timeout(obj->resv, DMA_RESV_USAGE_BOOKKEEP, false,
                              MAX_SCHEDULE_TIMEOUT);
 
-       msm_gem_lock_vm_and_obj(&exec, obj, ctx->vm);
        put_iova_spaces(obj, ctx->vm, true, "close");
-       drm_exec_fini(&exec);     /* drop locks */
 }
 
 /*
@@ -106,11 +114,7 @@ void msm_gem_vma_put(struct drm_gem_object *obj)
                return;
 
 #ifdef CONFIG_DRM_MSM_KMS
-       struct drm_exec exec;
-
-       msm_gem_lock_vm_and_obj(&exec, obj, priv->kms->vm);
        put_iova_spaces(obj, priv->kms->vm, true, "vma_put");
-       drm_exec_fini(&exec);     /* drop locks */
 #endif
 }
 
@@ -409,8 +413,8 @@ static struct drm_gpuva *lookup_vma(struct drm_gem_object 
*obj,
  * mapping.
  */
 static void
-put_iova_spaces(struct drm_gem_object *obj, struct drm_gpuvm *vm,
-               bool close, const char *reason)
+put_iova_spaces_locked(struct drm_gem_object *obj, struct drm_gpuvm *vm,
+                      bool close, const char *reason)
 {
        struct drm_gpuvm_bo *vm_bo, *tmp;
 
@@ -669,7 +673,7 @@ void msm_gem_unpin_iova(struct drm_gem_object *obj, struct 
drm_gpuvm *vm)
                msm_gem_unpin_locked(obj);
        }
        if (!is_kms_vm(vm))
-               put_iova_spaces(obj, vm, true, "close");
+               put_iova_spaces_locked(obj, vm, true, "close");
        drm_exec_fini(&exec);     /* drop locks */
 }
 
@@ -831,7 +835,7 @@ void msm_gem_purge(struct drm_gem_object *obj)
        GEM_WARN_ON(!is_purgeable(msm_obj));
 
        /* Get rid of any iommu mapping(s): */
-       put_iova_spaces(obj, NULL, false, "purge");
+       put_iova_spaces_locked(obj, NULL, false, "purge");
 
        msm_gem_vunmap(obj);
 
@@ -869,7 +873,7 @@ void msm_gem_evict(struct drm_gem_object *obj)
        GEM_WARN_ON(is_unevictable(msm_obj));
 
        /* Get rid of any iommu mapping(s): */
-       put_iova_spaces(obj, NULL, false, "evict");
+       put_iova_spaces_locked(obj, NULL, false, "evict");
 
        drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping);
 
@@ -1082,7 +1086,7 @@ static void msm_gem_free_object(struct drm_gem_object 
*obj)
                                drm_exec_retry_on_contention(&exec);
                        }
                }
-               put_iova_spaces(obj, NULL, true, "free");
+               put_iova_spaces_locked(obj, NULL, true, "free");
                drm_exec_fini(&exec);     /* drop locks */
        }
 

-- 
2.47.3

Reply via email to