[PATCH 1/2] drm/scheduler: Change scheduled fence track
Christian König
ckoenig.leichtzumerken at gmail.com
Fri Apr 16 11:26:02 UTC 2021
Am 16.04.21 um 07:04 schrieb Roy Sun:
> Update the timestamp of scheduled fence on HW
> completion of the previous fences
>
> This allow more accurate tracking of the fence
> execution in HW
>
> Signed-off-by: David M Nieto <david.nieto at amd.com>
> Signed-off-by: Roy Sun <Roy.Sun at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com> for the series.
Nirmoy if you are idle again could you give that a testing round? I
don't expect it to cause trouble, just want to double check that we
haven't forgotten taking a lock or stuff like that.
Thanks,
Christian.
> ---
> drivers/gpu/drm/scheduler/sched_main.c | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
> index 92d8de24d0a1..4e5d8d4af010 100644
> --- a/drivers/gpu/drm/scheduler/sched_main.c
> +++ b/drivers/gpu/drm/scheduler/sched_main.c
> @@ -515,7 +515,7 @@ void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched)
> EXPORT_SYMBOL(drm_sched_resubmit_jobs);
>
> /**
> - * drm_sched_resubmit_jobs_ext - helper to relunch certain number of jobs from mirror ring list
> + * drm_sched_resubmit_jobs_ext - helper to relunch certain number of jobs from pending list
> *
> * @sched: scheduler instance
> * @max: job numbers to relaunch
> @@ -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);
> + /* account for the next fence in the queue */
> + next = list_first_entry_or_null(&sched->pending_list,
> + struct drm_sched_job, list);
> + if (next) {
> + next->s_fence->scheduled.timestamp =
> + job->s_fence->finished.timestamp;
> + }
> } else {
> job = NULL;
> /* queue timeout for next job */
More information about the amd-gfx
mailing list