Skip to content

Commit

Permalink
drm/msm/gem: Unpin buffers earlier
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Rob Clark committed Aug 27, 2022
1 parent b352ba5 commit f371bcc
Showing 1 changed file with 2 additions and 6 deletions.
8 changes: 2 additions & 6 deletions drivers/gpu/drm/msm/msm_gem_submit.c
Original file line number Diff line number Diff line change
Expand Up @@ -501,11 +501,11 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
*/
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;
Expand All @@ -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);
}
}
Expand Down

0 comments on commit f371bcc

Please sign in to comment.