瀏覽代碼

drm/amd/sched: move adding finish callback to amd_sched_job_begin

The finish callback is responsible for removing the job from the ring
mirror list, among other things. It makes sense to add it as callback
in the place where the job is added to the ring mirror list.

Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Andres Rodriguez <andresx7@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Nicolai Hähnle 7 年之前
父節點
當前提交
214a91e6bf
共有 1 個文件被更改,包括 3 次插入2 次删除
  1. 3 2
      drivers/gpu/drm/amd/scheduler/gpu_scheduler.c

+ 3 - 2
drivers/gpu/drm/amd/scheduler/gpu_scheduler.c

@@ -395,6 +395,9 @@ static void amd_sched_job_begin(struct amd_sched_job *s_job)
 {
 {
 	struct amd_gpu_scheduler *sched = s_job->sched;
 	struct amd_gpu_scheduler *sched = s_job->sched;
 
 
+	dma_fence_add_callback(&s_job->s_fence->finished, &s_job->finish_cb,
+			       amd_sched_job_finish_cb);
+
 	spin_lock(&sched->job_list_lock);
 	spin_lock(&sched->job_list_lock);
 	list_add_tail(&s_job->node, &sched->ring_mirror_list);
 	list_add_tail(&s_job->node, &sched->ring_mirror_list);
 	if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
 	if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
@@ -487,8 +490,6 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job)
 	struct amd_sched_entity *entity = sched_job->s_entity;
 	struct amd_sched_entity *entity = sched_job->s_entity;
 
 
 	trace_amd_sched_job(sched_job);
 	trace_amd_sched_job(sched_job);
-	dma_fence_add_callback(&sched_job->s_fence->finished, &sched_job->finish_cb,
-			       amd_sched_job_finish_cb);
 	wait_event(entity->sched->job_scheduled,
 	wait_event(entity->sched->job_scheduled,
 		   amd_sched_entity_in(sched_job));
 		   amd_sched_entity_in(sched_job));
 }
 }