Buffer objects allocated with msm_gem_kernel_new() are mostly
freed the same way so we can save a few lines of code with a
common function.

Signed-off-by: Jordan Crouse <jcro...@codeaurora.org>
---
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c     | 13 ++-----------
 drivers/gpu/drm/msm/adreno/a5xx_power.c   | 13 +------------
 drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 14 ++------------
 drivers/gpu/drm/msm/msm_drv.h             |  2 ++
 drivers/gpu/drm/msm/msm_gem.c             | 15 +++++++++++++++
 drivers/gpu/drm/msm/msm_gpu.c             | 12 ++----------
 drivers/gpu/drm/msm/msm_ringbuffer.c      |  7 ++-----
 7 files changed, 26 insertions(+), 50 deletions(-)

diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c 
b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
index 2d34643ef2e2..d6f8dedc028a 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
@@ -1228,15 +1228,6 @@ static int a5xx_crashdumper_init(struct msm_gpu *gpu,
        return 0;
 }
 
-static void a5xx_crashdumper_free(struct msm_gpu *gpu,
-               struct a5xx_crashdumper *dumper)
-{
-       msm_gem_put_iova(dumper->bo, gpu->aspace);
-       msm_gem_put_vaddr(dumper->bo);
-
-       drm_gem_object_put(dumper->bo);
-}
-
 static int a5xx_crashdumper_run(struct msm_gpu *gpu,
                struct a5xx_crashdumper *dumper)
 {
@@ -1329,7 +1320,7 @@ static void a5xx_gpu_state_get_hlsq_regs(struct msm_gpu 
*gpu,
 
        if (a5xx_crashdumper_run(gpu, &dumper)) {
                kfree(a5xx_state->hlsqregs);
-               a5xx_crashdumper_free(gpu, &dumper);
+               msm_gem_kernel_put(dumper.bo, gpu->aspace, true);
                return;
        }
 
@@ -1337,7 +1328,7 @@ static void a5xx_gpu_state_get_hlsq_regs(struct msm_gpu 
*gpu,
        memcpy(a5xx_state->hlsqregs, dumper.ptr + (256 * SZ_1K),
                count * sizeof(u32));
 
-       a5xx_crashdumper_free(gpu, &dumper);
+       msm_gem_kernel_put(dumper.bo, gpu->aspace, true);
 }
 
 static struct msm_gpu_state *a5xx_gpu_state_get(struct msm_gpu *gpu)
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_power.c 
b/drivers/gpu/drm/msm/adreno/a5xx_power.c
index 7a41e1c147e4..66bcd88dd8c0 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_power.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_power.c
@@ -298,7 +298,7 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
                MSM_BO_UNCACHED | MSM_BO_GPU_READONLY, gpu->aspace,
                &a5xx_gpu->gpmu_bo, &a5xx_gpu->gpmu_iova);
        if (IS_ERR(ptr))
-               goto err;
+               return;
 
        while (cmds_size > 0) {
                int i;
@@ -317,15 +317,4 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
 
        msm_gem_put_vaddr(a5xx_gpu->gpmu_bo);
        a5xx_gpu->gpmu_dwords = dwords;
-
-       return;
-err:
-       if (a5xx_gpu->gpmu_iova)
-               msm_gem_put_iova(a5xx_gpu->gpmu_bo, gpu->aspace);
-       if (a5xx_gpu->gpmu_bo)
-               drm_gem_object_put(a5xx_gpu->gpmu_bo);
-
-       a5xx_gpu->gpmu_bo = NULL;
-       a5xx_gpu->gpmu_iova = 0;
-       a5xx_gpu->gpmu_dwords = 0;
 }
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c 
b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c
index fdb08fc68c2c..48481e663685 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c
@@ -267,18 +267,8 @@ void a5xx_preempt_fini(struct msm_gpu *gpu)
        struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu);
        int i;
 
-       for (i = 0; i < gpu->nr_rings; i++) {
-               if (!a5xx_gpu->preempt_bo[i])
-                       continue;
-
-               msm_gem_put_vaddr(a5xx_gpu->preempt_bo[i]);
-
-               if (a5xx_gpu->preempt_iova[i])
-                       msm_gem_put_iova(a5xx_gpu->preempt_bo[i], gpu->aspace);
-
-               drm_gem_object_put(a5xx_gpu->preempt_bo[i]);
-               a5xx_gpu->preempt_bo[i] = NULL;
-       }
+       for (i = 0; i < gpu->nr_rings; i++)
+               msm_gem_kernel_put(a5xx_gpu->preempt_bo[i], gpu->aspace, true);
 }
 
 void a5xx_preempt_init(struct msm_gpu *gpu)
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index 9d11f321f5a9..3225f8fbd8c9 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -312,6 +312,8 @@ void *msm_gem_kernel_new(struct drm_device *dev, uint32_t 
size,
 void *msm_gem_kernel_new_locked(struct drm_device *dev, uint32_t size,
                uint32_t flags, struct msm_gem_address_space *aspace,
                struct drm_gem_object **bo, uint64_t *iova);
+void msm_gem_kernel_put(struct drm_gem_object *bo,
+               struct msm_gem_address_space *aspace, bool locked);
 struct drm_gem_object *msm_gem_import(struct drm_device *dev,
                struct dma_buf *dmabuf, struct sg_table *sgt);
 
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 00c795ced02c..855f5721a14e 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -1073,3 +1073,18 @@ void *msm_gem_kernel_new_locked(struct drm_device *dev, 
uint32_t size,
 {
        return _msm_gem_kernel_new(dev, size, flags, aspace, bo, iova, true);
 }
+
+void msm_gem_kernel_put(struct drm_gem_object *bo,
+               struct msm_gem_address_space *aspace, bool locked)
+{
+       if (IS_ERR_OR_NULL(bo))
+               return;
+
+       msm_gem_put_vaddr(bo);
+       msm_gem_put_iova(bo, aspace);
+
+       if (locked)
+               drm_gem_object_put(bo);
+       else
+               drm_gem_object_put_unlocked(bo);
+}
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index ff958486819b..71a2d431663f 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -961,11 +961,7 @@ int msm_gpu_init(struct drm_device *drm, struct 
platform_device *pdev,
                gpu->rb[i] = NULL;
        }
 
-       if (gpu->memptrs_bo) {
-               msm_gem_put_vaddr(gpu->memptrs_bo);
-               msm_gem_put_iova(gpu->memptrs_bo, gpu->aspace);
-               drm_gem_object_put_unlocked(gpu->memptrs_bo);
-       }
+       msm_gem_kernel_put(gpu->memptrs_bo, gpu->aspace, false);
 
        platform_set_drvdata(pdev, NULL);
        return ret;
@@ -984,11 +980,7 @@ void msm_gpu_cleanup(struct msm_gpu *gpu)
                gpu->rb[i] = NULL;
        }
 
-       if (gpu->memptrs_bo) {
-               msm_gem_put_vaddr(gpu->memptrs_bo);
-               msm_gem_put_iova(gpu->memptrs_bo, gpu->aspace);
-               drm_gem_object_put_unlocked(gpu->memptrs_bo);
-       }
+       msm_gem_kernel_put(gpu->memptrs_bo, gpu->aspace, false);
 
        if (!IS_ERR_OR_NULL(gpu->aspace)) {
                gpu->aspace->mmu->funcs->detach(gpu->aspace->mmu,
diff --git a/drivers/gpu/drm/msm/msm_ringbuffer.c 
b/drivers/gpu/drm/msm/msm_ringbuffer.c
index 6f5295b3f2f6..9fa9525c5293 100644
--- a/drivers/gpu/drm/msm/msm_ringbuffer.c
+++ b/drivers/gpu/drm/msm/msm_ringbuffer.c
@@ -73,10 +73,7 @@ void msm_ringbuffer_destroy(struct msm_ringbuffer *ring)
 
        msm_fence_context_free(ring->fctx);
 
-       if (ring->bo) {
-               msm_gem_put_iova(ring->bo, ring->gpu->aspace);
-               msm_gem_put_vaddr(ring->bo);
-               drm_gem_object_put_unlocked(ring->bo);
-       }
+       msm_gem_kernel_put(ring->bo, ring->gpu->aspace, false);
+
        kfree(ring);
 }
-- 
2.18.0

_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno

Reply via email to