diff mbox

[v2,1/2] drm/scheduler: add a pointer to scheduler in the rq

Message ID 20180713095114.29211-1-nayan26deshmukh@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Nayan Deshmukh July 13, 2018, 9:51 a.m. UTC
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(-)

Comments

Nayan Deshmukh July 13, 2018, 1:40 p.m. UTC | #1
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
>
Christian König July 13, 2018, 1:45 p.m. UTC | #2
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 mbox

Patch

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;
 };