drm/scheduler: add a list of run queues to the entity

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>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Nayan Deshmukh 2018-08-01 13:49:59 +05:30 коммит произвёл Alex Deucher
Родитель c36628d898
Коммит ac0a6cf1c6
2 изменённых файлов: 14 добавлений и 1 удалений

Просмотреть файл

@ -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);
@ -348,6 +355,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);

Просмотреть файл

@ -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
@ -75,6 +78,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;