Skip to content

Commit 9fb3280

Browse files
committed
drm/panfrost: Use DRM_GPU_SCHED_STAT_NO_HANG to skip the reset
Panfrost can skip the reset if TDR has fired before the free-job worker. Currently, since Panfrost doesn't take any action on these scenarios, the job is being leaked, considering that `free_job()` won't be called. To avoid such leaks, inform the scheduler that the job did not actually timeout and no reset was performed through the new status code DRM_GPU_SCHED_STAT_NO_HANG. Reviewed-by: Steven Price <steven.price@arm.com> Link: https://lore.kernel.org/r/20250714-sched-skip-reset-v6-8-5c5ba4f55039@igalia.com Signed-off-by: Maíra Canal <mcanal@igalia.com>
1 parent 53dcd0e commit 9fb3280

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

drivers/gpu/drm/panfrost/panfrost_job.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -751,11 +751,11 @@ static enum drm_gpu_sched_stat panfrost_job_timedout(struct drm_sched_job
751751
int js = panfrost_job_get_slot(job);
752752

753753
/*
754-
* If the GPU managed to complete this jobs fence, the timeout is
755-
* spurious. Bail out.
754+
* If the GPU managed to complete this jobs fence, the timeout has
755+
* fired before free-job worker. The timeout is spurious, so bail out.
756756
*/
757757
if (dma_fence_is_signaled(job->done_fence))
758-
return DRM_GPU_SCHED_STAT_RESET;
758+
return DRM_GPU_SCHED_STAT_NO_HANG;
759759

760760
/*
761761
* Panfrost IRQ handler may take a long time to process an interrupt
@@ -770,7 +770,7 @@ static enum drm_gpu_sched_stat panfrost_job_timedout(struct drm_sched_job
770770

771771
if (dma_fence_is_signaled(job->done_fence)) {
772772
dev_warn(pfdev->dev, "unexpectedly high interrupt latency\n");
773-
return DRM_GPU_SCHED_STAT_RESET;
773+
return DRM_GPU_SCHED_STAT_NO_HANG;
774774
}
775775

776776
dev_err(pfdev->dev, "gpu sched timeout, js=%d, config=0x%x, status=0x%x, head=0x%x, tail=0x%x, sched_job=%p",

0 commit comments

Comments
 (0)