Commit e8deea2d authored by Chunming Zhou's avatar Chunming Zhou Committed by Alex Deucher

drm/amdgpu: add entity only when first job come

umd somtimes will create a context for every ring,
that means some entities wouldn't be used at all.
Signed-off-by: default avatarChunming Zhou <David1.Zhou@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2c1a2784
...@@ -47,6 +47,8 @@ static void amd_sched_rq_init(struct amd_sched_rq *rq) ...@@ -47,6 +47,8 @@ static void amd_sched_rq_init(struct amd_sched_rq *rq)
static void amd_sched_rq_add_entity(struct amd_sched_rq *rq, static void amd_sched_rq_add_entity(struct amd_sched_rq *rq,
struct amd_sched_entity *entity) struct amd_sched_entity *entity)
{ {
if (!list_empty(&entity->list))
return;
spin_lock(&rq->lock); spin_lock(&rq->lock);
list_add_tail(&entity->list, &rq->entities); list_add_tail(&entity->list, &rq->entities);
spin_unlock(&rq->lock); spin_unlock(&rq->lock);
...@@ -55,6 +57,8 @@ static void amd_sched_rq_add_entity(struct amd_sched_rq *rq, ...@@ -55,6 +57,8 @@ static void amd_sched_rq_add_entity(struct amd_sched_rq *rq,
static void amd_sched_rq_remove_entity(struct amd_sched_rq *rq, static void amd_sched_rq_remove_entity(struct amd_sched_rq *rq,
struct amd_sched_entity *entity) struct amd_sched_entity *entity)
{ {
if (list_empty(&entity->list))
return;
spin_lock(&rq->lock); spin_lock(&rq->lock);
list_del_init(&entity->list); list_del_init(&entity->list);
if (rq->current_entity == entity) if (rq->current_entity == entity)
...@@ -138,9 +142,6 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched, ...@@ -138,9 +142,6 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
atomic_set(&entity->fence_seq, 0); atomic_set(&entity->fence_seq, 0);
entity->fence_context = fence_context_alloc(1); entity->fence_context = fence_context_alloc(1);
/* Add the entity to the run queue */
amd_sched_rq_add_entity(rq, entity);
return 0; return 0;
} }
...@@ -302,9 +303,11 @@ static bool amd_sched_entity_in(struct amd_sched_job *sched_job) ...@@ -302,9 +303,11 @@ static bool amd_sched_entity_in(struct amd_sched_job *sched_job)
spin_unlock(&entity->queue_lock); spin_unlock(&entity->queue_lock);
/* first job wakes up scheduler */ /* first job wakes up scheduler */
if (first) if (first) {
/* Add the entity to the run queue */
amd_sched_rq_add_entity(entity->rq, entity);
amd_sched_wakeup(sched); amd_sched_wakeup(sched);
}
return added; return added;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment