drm/scheduler: bind job earlier to scheduler
authorChristian König <christian.koenig@amd.com>
Mon, 6 Aug 2018 10:46:41 +0000 (12:46 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 27 Aug 2018 16:10:01 +0000 (11:10 -0500)
Update job earlier with the scheduler it is supposed to be scheduled on.

Otherwise we could incorrectly optimize dependencies when moving an
entity from one scheduler to another.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Nayan Deshmukh <nayan26deshmukh@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/scheduler/gpu_scheduler.c
drivers/gpu/drm/scheduler/sched_fence.c

index 695a9643f046aa633ab728796122a8b7a32047db..da2da8d8503525df9ad04b3121ed3f6e70ca480a 100644 (file)
@@ -530,8 +530,6 @@ drm_sched_entity_pop_job(struct drm_sched_entity *entity)
        if (!sched_job)
                return NULL;
 
-       sched_job->sched = sched;
-       sched_job->s_fence->sched = sched;
        while ((entity->dependency = sched->ops->dependency(sched_job, entity))) {
                if (drm_sched_entity_add_dependency_cb(entity)) {
 
@@ -582,6 +580,8 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job,
                spin_unlock(&entity->rq_lock);
        }
 
+       sched_job->sched = entity->rq->sched;
+       sched_job->s_fence->sched = entity->rq->sched;
        trace_drm_sched_job(sched_job, entity);
        atomic_inc(&entity->rq->sched->num_jobs);
        WRITE_ONCE(entity->last_user, current->group_leader);
index d8d2dff9ea2f79d17479426db774a5b8049d90e7..20e4da377890a966d5b695acdde5016fd4cca0ad 100644 (file)
@@ -161,7 +161,7 @@ struct drm_sched_fence *drm_sched_fence_create(struct drm_sched_entity *entity,
                return NULL;
 
        fence->owner = owner;
-       fence->sched = entity->rq->sched;
+       fence->sched = NULL;
        spin_lock_init(&fence->lock);
 
        seq = atomic_inc_return(&entity->fence_seq);