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:
parent
c36628d898
commit
ac0a6cf1c6
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue