Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac0a6cf1 authored by Nayan Deshmukh's avatar Nayan Deshmukh Committed by Alex Deucher
Browse files

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: default avatarNayan Deshmukh <nayan26deshmukh@gmail.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c36628d8
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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);

+6 −1
Original line number Diff line number Diff line
@@ -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;