drm/scheduler: Change scheduled fence track v2
authorRoy Sun <Roy.Sun@amd.com>
Mon, 26 Apr 2021 06:27:00 +0000 (14:27 +0800)
committerChristian König <christian.koenig@amd.com>
Wed, 5 May 2021 07:26:36 +0000 (09:26 +0200)
Update the timestamp of scheduled fence on HW
completion of the previous fences

This allow more accurate tracking of the fence
execution in HW

v2 (chk): drop the flag check and improve the comment

Signed-off-by: David M Nieto <david.nieto@amd.com>
Signed-off-by: Roy Sun <Roy.Sun@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210426062701.39732-1-Roy.Sun@amd.com
drivers/gpu/drm/scheduler/sched_main.c

index 92d8de2..f4f4749 100644 (file)
@@ -671,7 +671,7 @@ drm_sched_select_entity(struct drm_gpu_scheduler *sched)
 static struct drm_sched_job *
 drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
 {
-       struct drm_sched_job *job;
+       struct drm_sched_job *job, *next;
 
        /*
         * Don't destroy jobs while the timeout worker is running  OR thread
@@ -690,6 +690,13 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
        if (job && dma_fence_is_signaled(&job->s_fence->finished)) {
                /* remove job from pending_list */
                list_del_init(&job->list);
+               /* make the scheduled timestamp more accurate */
+               next = list_first_entry_or_null(&sched->pending_list,
+                                               typeof(*next), list);
+               if (next)
+                       next->s_fence->scheduled.timestamp =
+                               job->s_fence->finished.timestamp;
+
        } else {
                job = NULL;
                /* queue timeout for next job */