drm/msm: Take single rpm refcount on behalf of all submits
authorAkhil P Oommen <quic_akhilpo@quicinc.com>
Thu, 18 Aug 2022 20:22:10 +0000 (01:52 +0530)
committerRob Clark <robdclark@chromium.org>
Sun, 28 Aug 2022 16:29:27 +0000 (09:29 -0700)
Instead of separate refcount for each submit, take single rpm refcount
on behalf of all the submits. This makes it easier to drop the rpm
refcount during recovery in an upcoming patch.

Signed-off-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/498392/
Link: https://lore.kernel.org/r/20220819015030.v5.2.Ifee853f6d8217a0fdacc459092bbc9e81a8a7ac7@changeid
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/msm_gpu.c

index fba85f894314f2913d9e01a9909378b4f4cdcbd0..0a9406182ea7fc2d90a46f74a2bd0c25bde93131 100644 (file)
@@ -664,11 +664,12 @@ static void retire_submit(struct msm_gpu *gpu, struct msm_ringbuffer *ring,
        mutex_lock(&gpu->active_lock);
        gpu->active_submits--;
        WARN_ON(gpu->active_submits < 0);
-       if (!gpu->active_submits)
+       if (!gpu->active_submits) {
                msm_devfreq_idle(gpu);
-       mutex_unlock(&gpu->active_lock);
+               pm_runtime_put_autosuspend(&gpu->pdev->dev);
+       }
 
-       pm_runtime_put_autosuspend(&gpu->pdev->dev);
+       mutex_unlock(&gpu->active_lock);
 
        msm_gem_submit_put(submit);
 }
@@ -757,14 +758,17 @@ void msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
 
        /* Update devfreq on transition from idle->active: */
        mutex_lock(&gpu->active_lock);
-       if (!gpu->active_submits)
+       if (!gpu->active_submits) {
+               pm_runtime_get(&gpu->pdev->dev);
                msm_devfreq_active(gpu);
+       }
        gpu->active_submits++;
        mutex_unlock(&gpu->active_lock);
 
        gpu->funcs->submit(gpu, submit);
        gpu->cur_ctx_seqno = submit->queue->ctx->seqno;
 
+       pm_runtime_put(&gpu->pdev->dev);
        hangcheck_timer_reset(gpu);
 }