diff options
Diffstat (limited to 'drivers/gpu/drm/scheduler/sched_entity.c')
-rw-r--r-- | drivers/gpu/drm/scheduler/sched_entity.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c index 3e22a54a99c2..4463d3826ecb 100644 --- a/drivers/gpu/drm/scheduler/sched_entity.c +++ b/drivers/gpu/drm/scheduler/sched_entity.c | |||
@@ -130,7 +130,14 @@ drm_sched_entity_get_free_sched(struct drm_sched_entity *entity) | |||
130 | int i; | 130 | int i; |
131 | 131 | ||
132 | for (i = 0; i < entity->num_rq_list; ++i) { | 132 | for (i = 0; i < entity->num_rq_list; ++i) { |
133 | num_jobs = atomic_read(&entity->rq_list[i]->sched->num_jobs); | 133 | struct drm_gpu_scheduler *sched = entity->rq_list[i]->sched; |
134 | |||
135 | if (!entity->rq_list[i]->sched->ready) { | ||
136 | DRM_WARN("sched%s is not ready, skipping", sched->name); | ||
137 | continue; | ||
138 | } | ||
139 | |||
140 | num_jobs = atomic_read(&sched->num_jobs); | ||
134 | if (num_jobs < min_jobs) { | 141 | if (num_jobs < min_jobs) { |
135 | min_jobs = num_jobs; | 142 | min_jobs = num_jobs; |
136 | rq = entity->rq_list[i]; | 143 | rq = entity->rq_list[i]; |
@@ -204,7 +211,6 @@ static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f, | |||
204 | 211 | ||
205 | drm_sched_fence_finished(job->s_fence); | 212 | drm_sched_fence_finished(job->s_fence); |
206 | WARN_ON(job->s_fence->parent); | 213 | WARN_ON(job->s_fence->parent); |
207 | dma_fence_put(&job->s_fence->finished); | ||
208 | job->sched->ops->free_job(job); | 214 | job->sched->ops->free_job(job); |
209 | } | 215 | } |
210 | 216 | ||