Message ID | 20180713095114.29211-1-nayan26deshmukh@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
I forgot to add these: On Fri, Jul 13, 2018 at 3:21 PM Nayan Deshmukh <nayan26deshmukh@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@gmail.com> Reviewed-by: Christian König <christian.koenig@amd.com> Acked-by: Eric Anholt <eric@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 >
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@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@gmail.com> > Reviewed-by: Christian König <christian.koenig@amd.com> > Acked-by: Eric Anholt <eric@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 >>
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; };
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@gmail.com> --- drivers/gpu/drm/scheduler/gpu_scheduler.c | 6 ++++-- include/drm/gpu_scheduler.h | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-)