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

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

drm/scheduler: add new function to get least loaded sched v2



The function selects the run queue from the rq_list with the
least load. The load is decided by the number of jobs in a
scheduler.

v2: avoid using atomic read twice consecutively, instead store
    it locally

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 249a07c0
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -241,6 +241,31 @@ static bool drm_sched_entity_is_ready(struct drm_sched_entity *entity)
	return true;
}

/**
 * drm_sched_entity_get_free_sched - Get the rq from rq_list with least load
 *
 * @entity: scheduler entity
 *
 * Return the pointer to the rq with least load.
 */
static struct drm_sched_rq *
drm_sched_entity_get_free_sched(struct drm_sched_entity *entity)
{
	struct drm_sched_rq *rq = NULL;
	unsigned int min_jobs = UINT_MAX, num_jobs;
	int i;

	for (i = 0; i < entity->num_rq_list; ++i) {
		num_jobs = atomic_read(&entity->rq_list[i]->sched->num_jobs);
		if (num_jobs < min_jobs) {
			min_jobs = num_jobs;
			rq = entity->rq_list[i];
		}
	}

	return rq;
}

static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f,
				    struct dma_fence_cb *cb)
{