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 at gmail.com> Reviewed-by: Christian König <christian.koenig at 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;