Am 13.07.2018 um 15:40 schrieb Nayan Deshmukh: > I forgot to add these: Not a problem at all. It is actually my job to do this while committing the patches. BTW: I've pushed you patches to amd-staging-drm-next just a few minutes ago. Thanks for the help. I'm preparing quite a cleanup for amdgpu which should make your live easier, but still no idea why the scheduler hangs when we try to load balance jobs. Regards, Christian. > On Fri, Jul 13, 2018 at 3:21 PM Nayan Deshmukh > <nayan26deshmukh at gmail.com> wrote: >> This patch is in preparation for a better load balancing in >> scheduler. It allows us to associate entities with the >> run queues instead of binding them to a scheduler. >> >> Signed-off-by: Nayan Deshmukh <nayan26deshmukh at gmail.com> > Reviewed-by: Christian König <christian.koenig at amd.com> > Acked-by: Eric Anholt <eric at anholt.net> > >> --- >> drivers/gpu/drm/scheduler/gpu_scheduler.c | 6 ++++-- >> include/drm/gpu_scheduler.h | 2 ++ >> 2 files changed, 6 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c >> index 7d2560699b84..429b1328653a 100644 >> --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c >> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c >> @@ -69,11 +69,13 @@ static void drm_sched_process_job(struct dma_fence *f, struct dma_fence_cb *cb); >> * >> * Initializes a scheduler runqueue. >> */ >> -static void drm_sched_rq_init(struct drm_sched_rq *rq) >> +static void drm_sched_rq_init(struct drm_gpu_scheduler *sched, >> + struct drm_sched_rq *rq) >> { >> spin_lock_init(&rq->lock); >> INIT_LIST_HEAD(&rq->entities); >> rq->current_entity = NULL; >> + rq->sched = sched; >> } >> >> /** >> @@ -926,7 +928,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched, >> sched->timeout = timeout; >> sched->hang_limit = hang_limit; >> for (i = DRM_SCHED_PRIORITY_MIN; i < DRM_SCHED_PRIORITY_MAX; i++) >> - drm_sched_rq_init(&sched->sched_rq[i]); >> + drm_sched_rq_init(sched, &sched->sched_rq[i]); >> >> init_waitqueue_head(&sched->wake_up_worker); >> init_waitqueue_head(&sched->job_scheduled); >> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h >> index 4214ceb71c05..43e93d6077cf 100644 >> --- a/include/drm/gpu_scheduler.h >> +++ b/include/drm/gpu_scheduler.h >> @@ -93,6 +93,7 @@ struct drm_sched_entity { >> * struct drm_sched_rq - queue of entities to be scheduled. >> * >> * @lock: to modify the entities list. >> + * @sched: the scheduler to which this rq belongs to. >> * @entities: list of the entities to be scheduled. >> * @current_entity: the entity which is to be scheduled. >> * >> @@ -102,6 +103,7 @@ struct drm_sched_entity { >> */ >> struct drm_sched_rq { >> spinlock_t lock; >> + struct drm_gpu_scheduler *sched; >> struct list_head entities; >> struct drm_sched_entity *current_entity; >> }; >> -- >> 2.14.3 >>