panfrost_reset() does not directly signal fences, but panfrost_scheduler_start() does, when calling drm_sched_start(). Signed-off-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx> --- drivers/gpu/drm/panfrost/panfrost_job.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c index 74b63e1ee6d9..cf6abe0fdf47 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -414,6 +414,7 @@ static bool panfrost_scheduler_stop(struct panfrost_queue_state *queue, static void panfrost_scheduler_start(struct panfrost_queue_state *queue) { enum panfrost_queue_status old_status; + bool cookie; mutex_lock(&queue->lock); old_status = atomic_xchg(&queue->status, @@ -423,7 +424,9 @@ static void panfrost_scheduler_start(struct panfrost_queue_state *queue) /* Restore the original timeout before starting the scheduler. */ queue->sched.timeout = msecs_to_jiffies(JOB_TIMEOUT_MS); drm_sched_resubmit_jobs(&queue->sched); + cookie = dma_fence_begin_signalling(); drm_sched_start(&queue->sched, true); + dma_fence_end_signalling(cookie); old_status = atomic_xchg(&queue->status, PANFROST_QUEUE_STATUS_ACTIVE); if (old_status == PANFROST_QUEUE_STATUS_FAULT_PENDING) @@ -566,9 +569,7 @@ static void panfrost_reset(struct work_struct *work) reset.work); unsigned long flags; unsigned int i; - bool cookie; - cookie = dma_fence_begin_signalling(); for (i = 0; i < NUM_JOB_SLOTS; i++) { /* * We want pending timeouts to be handled before we attempt @@ -608,8 +609,6 @@ static void panfrost_reset(struct work_struct *work) for (i = 0; i < NUM_JOB_SLOTS; i++) panfrost_scheduler_start(&pfdev->js->queue[i]); - - dma_fence_end_signalling(cookie); } int panfrost_job_init(struct panfrost_device *pfdev) -- 2.31.1