[PATCH 1/2] drm/msm: factor out a locking put_iova_spaces() wrapper
Dmitry Baryshkov <[email protected]>
| Newsgroups | org.freedesktop.lists.dri-devel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media |
|---|---|
| Message-ID | <[email protected]> |
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