]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/msm/gem: Unpin buffers earlier
authorRob Clark <robdclark@chromium.org>
Tue, 2 Aug 2022 15:51:44 +0000 (08:51 -0700)
committerRob Clark <robdclark@chromium.org>
Sat, 27 Aug 2022 16:32:45 +0000 (09:32 -0700)
We've already attached the fences, so obj->resv (which shrinker checks)
tells us whether they are still active.  So we can unpin sooner, before
we drop the queue lock.

This also avoids the need to grab the obj lock in the retire path,
avoiding potential for lock contention between submit and retire.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/496132/
Link: https://lore.kernel.org/r/20220802155152.1727594-12-robdclark@gmail.com
drivers/gpu/drm/msm/msm_gem_submit.c

index adf358fb8e9db9848755c614ba3974cac756dca5..5599d93ec0d21d281d56418852fff9ae8be77f10 100644 (file)
@@ -501,11 +501,11 @@ out:
  */
 static void submit_cleanup(struct msm_gem_submit *submit, bool error)
 {
-       unsigned cleanup_flags = BO_LOCKED;
+       unsigned cleanup_flags = BO_LOCKED | BO_OBJ_PINNED;
        unsigned i;
 
        if (error)
-               cleanup_flags |= BO_VMA_PINNED | BO_OBJ_PINNED;
+               cleanup_flags |= BO_VMA_PINNED;
 
        for (i = 0; i < submit->nr_bos; i++) {
                struct msm_gem_object *msm_obj = submit->bos[i].obj;
@@ -522,10 +522,6 @@ void msm_submit_retire(struct msm_gem_submit *submit)
        for (i = 0; i < submit->nr_bos; i++) {
                struct drm_gem_object *obj = &submit->bos[i].obj->base;
 
-               msm_gem_lock(obj);
-               /* Note, VMA already fence-unpinned before submit: */
-               submit_cleanup_bo(submit, i, BO_OBJ_PINNED);
-               msm_gem_unlock(obj);
                drm_gem_object_put(obj);
        }
 }