[PATCH 1/4] drm/scheduler: add a list of run queues to the entity
Christian König
christian.koenig at amd.com
Wed Aug 1 09:35:51 UTC 2018
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;
More information about the dri-devel
mailing list