]> www.infradead.org Git - users/willy/xarray.git/commitdiff
drm/panfrost: Shrink sched_lock
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 22 Jun 2021 16:55:00 +0000 (18:55 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 23 Jun 2021 19:16:41 +0000 (21:16 +0200)
drm/scheduler requires a lock between _init and _push_job, but the
reservation lock dance doesn't. So shrink the critical section a
notch.

v2: Lucas pointed out how this should really work, I got it all wrong
in v1.

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Rob Herring <robh@kernel.org>
Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Cc: Steven Price <steven.price@arm.com>
Cc: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210622165511.3169559-5-daniel.vetter@ffwll.ch
drivers/gpu/drm/panfrost/panfrost_job.c

index 2df3e999a38d0be7b2c44c1826d1fafaa7dc8080..38f8580c19f1ee67675f21c36717bc3b20024e6c 100644 (file)
@@ -224,14 +224,13 @@ int panfrost_job_push(struct panfrost_job *job)
        struct ww_acquire_ctx acquire_ctx;
        int ret = 0;
 
-       mutex_lock(&pfdev->sched_lock);
 
        ret = drm_gem_lock_reservations(job->bos, job->bo_count,
                                            &acquire_ctx);
-       if (ret) {
-               mutex_unlock(&pfdev->sched_lock);
+       if (ret)
                return ret;
-       }
+
+       mutex_lock(&pfdev->sched_lock);
 
        ret = drm_sched_job_init(&job->base, entity, NULL);
        if (ret) {