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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx> 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@xxxxxxxxx>
Reviewed-by: Christian König <christian.koenig@xxxxxxx>
Acked-by: Eric Anholt <eric@xxxxxxxxxx>

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


_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux