Message ID | 20180801082002.20696-1-nayan26deshmukh@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/4] drm/scheduler: add a list of run queues to the entity | expand |
Am 01.08.2018 um 10:19 schrieb Nayan Deshmukh: > These are the potential run queues on which the jobs from this > entity can be scheduled. We will use this to do load balancing. > > Signed-off-by: Nayan Deshmukh <nayan26deshmukh@gmail.com> Reviewed-by: Christian König <christian.koenig@amd.com> for the whole series. I also just pushed them into our internal branch for upstreaming. Thanks for all the work, Christian. > --- > drivers/gpu/drm/scheduler/gpu_scheduler.c | 8 ++++++++ > include/drm/gpu_scheduler.h | 7 ++++++- > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c > index 3f2fc5e8242a..a3eacc35cf98 100644 > --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c > +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c > @@ -179,6 +179,8 @@ int drm_sched_entity_init(struct drm_sched_entity *entity, > unsigned int num_rq_list, > atomic_t *guilty) > { > + int i; > + > if (!(entity && rq_list && num_rq_list > 0 && rq_list[0])) > return -EINVAL; > > @@ -186,6 +188,11 @@ int drm_sched_entity_init(struct drm_sched_entity *entity, > INIT_LIST_HEAD(&entity->list); > entity->rq = rq_list[0]; > entity->guilty = guilty; > + entity->num_rq_list = num_rq_list; > + entity->rq_list = kcalloc(num_rq_list, sizeof(struct drm_sched_rq *), > + GFP_KERNEL); > + for (i = 0; i < num_rq_list; ++i) > + entity->rq_list[i] = rq_list[i]; > entity->last_scheduled = NULL; > > spin_lock_init(&entity->rq_lock); > @@ -363,6 +370,7 @@ void drm_sched_entity_fini(struct drm_sched_entity *entity) > > dma_fence_put(entity->last_scheduled); > entity->last_scheduled = NULL; > + kfree(entity->rq_list); > } > EXPORT_SYMBOL(drm_sched_entity_fini); > > diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h > index 091b9afcd184..a60896222a3e 100644 > --- a/include/drm/gpu_scheduler.h > +++ b/include/drm/gpu_scheduler.h > @@ -50,7 +50,10 @@ enum drm_sched_priority { > * > * @list: used to append this struct to the list of entities in the > * runqueue. > - * @rq: runqueue to which this entity belongs. > + * @rq: runqueue on which this entity is currently scheduled. > + * @rq_list: a list of run queues on which jobs from this entity can > + * be scheduled > + * @num_rq_list: number of run queues in the rq_list > * @rq_lock: lock to modify the runqueue to which this entity belongs. > * @job_queue: the list of jobs of this entity. > * @fence_seq: a linearly increasing seqno incremented with each > @@ -74,6 +77,8 @@ enum drm_sched_priority { > struct drm_sched_entity { > struct list_head list; > struct drm_sched_rq *rq; > + struct drm_sched_rq **rq_list; > + unsigned int num_rq_list; > spinlock_t rq_lock; > > struct spsc_queue job_queue;
diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c index 3f2fc5e8242a..a3eacc35cf98 100644 --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c @@ -179,6 +179,8 @@ int drm_sched_entity_init(struct drm_sched_entity *entity, unsigned int num_rq_list, atomic_t *guilty) { + int i; + if (!(entity && rq_list && num_rq_list > 0 && rq_list[0])) return -EINVAL; @@ -186,6 +188,11 @@ int drm_sched_entity_init(struct drm_sched_entity *entity, INIT_LIST_HEAD(&entity->list); entity->rq = rq_list[0]; entity->guilty = guilty; + entity->num_rq_list = num_rq_list; + entity->rq_list = kcalloc(num_rq_list, sizeof(struct drm_sched_rq *), + GFP_KERNEL); + for (i = 0; i < num_rq_list; ++i) + entity->rq_list[i] = rq_list[i]; entity->last_scheduled = NULL; spin_lock_init(&entity->rq_lock); @@ -363,6 +370,7 @@ void drm_sched_entity_fini(struct drm_sched_entity *entity) dma_fence_put(entity->last_scheduled); entity->last_scheduled = NULL; + kfree(entity->rq_list); } EXPORT_SYMBOL(drm_sched_entity_fini); diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h index 091b9afcd184..a60896222a3e 100644 --- a/include/drm/gpu_scheduler.h +++ b/include/drm/gpu_scheduler.h @@ -50,7 +50,10 @@ enum drm_sched_priority { * * @list: used to append this struct to the list of entities in the * runqueue. - * @rq: runqueue to which this entity belongs. + * @rq: runqueue on which this entity is currently scheduled. + * @rq_list: a list of run queues on which jobs from this entity can + * be scheduled + * @num_rq_list: number of run queues in the rq_list * @rq_lock: lock to modify the runqueue to which this entity belongs. * @job_queue: the list of jobs of this entity. * @fence_seq: a linearly increasing seqno incremented with each @@ -74,6 +77,8 @@ enum drm_sched_priority { struct drm_sched_entity { struct list_head list; struct drm_sched_rq *rq; + struct drm_sched_rq **rq_list; + unsigned int num_rq_list; spinlock_t rq_lock; struct spsc_queue job_queue;
These are the potential run queues on which the jobs from this entity can be scheduled. We will use this to do load balancing. Signed-off-by: Nayan Deshmukh <nayan26deshmukh@gmail.com> --- drivers/gpu/drm/scheduler/gpu_scheduler.c | 8 ++++++++ include/drm/gpu_scheduler.h | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-)