mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-19 03:53:51 -04:00
drm/sched: Add a basic test for modifying entities scheduler list
Add a basic test for exercising modifying the entities scheduler list at runtime. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com> Cc: Christian König <christian.koenig@amd.com> Cc: Danilo Krummrich <dakr@kernel.org> Cc: Matthew Brost <matthew.brost@intel.com> Cc: Philipp Stanner <phasta@kernel.org> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Philipp Stanner <phasta@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20250324092633.49746-6-tvrtko.ursulin@igalia.com
This commit is contained in:
committed by
Philipp Stanner
parent
7b765cda7a
commit
c85fc5db76
@@ -346,6 +346,73 @@ static struct kunit_suite drm_sched_priority = {
|
||||
.test_cases = drm_sched_priority_tests,
|
||||
};
|
||||
|
||||
static void drm_sched_test_modify_sched(struct kunit *test)
|
||||
{
|
||||
unsigned int i, cur_ent = 0, cur_sched = 0;
|
||||
struct drm_mock_sched_entity *entity[13];
|
||||
struct drm_mock_scheduler *sched[3];
|
||||
struct drm_mock_sched_job *job;
|
||||
const unsigned int qd = 1000;
|
||||
|
||||
/*
|
||||
* Submit a bunch of jobs against entities configured with different
|
||||
* schedulers and while waiting for them to complete, periodically keep
|
||||
* changing schedulers associated with each entity.
|
||||
*
|
||||
* We set up the queue-depth (qd) and job duration so the sched modify
|
||||
* loop has some time to interact with submissions to the backend and
|
||||
* job completions as they progress.
|
||||
*
|
||||
* For the number of schedulers and entities we use primes in order to
|
||||
* perturb the entity->sched assignments with less of a regular pattern.
|
||||
*/
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sched); i++)
|
||||
sched[i] = drm_mock_sched_new(test, MAX_SCHEDULE_TIMEOUT);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(entity); i++)
|
||||
entity[i] = drm_mock_sched_entity_new(test,
|
||||
DRM_SCHED_PRIORITY_NORMAL,
|
||||
sched[i % ARRAY_SIZE(sched)]);
|
||||
|
||||
for (i = 0; i < qd; i++) {
|
||||
job = drm_mock_sched_job_new(test, entity[cur_ent++]);
|
||||
cur_ent %= ARRAY_SIZE(entity);
|
||||
drm_mock_sched_job_set_duration_us(job, 1000);
|
||||
drm_mock_sched_job_submit(job);
|
||||
}
|
||||
|
||||
do {
|
||||
struct drm_gpu_scheduler *modify;
|
||||
|
||||
usleep_range(200, 500);
|
||||
cur_ent++;
|
||||
cur_ent %= ARRAY_SIZE(entity);
|
||||
cur_sched++;
|
||||
cur_sched %= ARRAY_SIZE(sched);
|
||||
modify = &sched[cur_sched]->base;
|
||||
drm_sched_entity_modify_sched(&entity[cur_ent]->base, &modify,
|
||||
1);
|
||||
} while (!drm_mock_sched_job_is_finished(job));
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(entity); i++)
|
||||
drm_mock_sched_entity_free(entity[i]);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sched); i++)
|
||||
drm_mock_sched_fini(sched[i]);
|
||||
}
|
||||
|
||||
static struct kunit_case drm_sched_modify_sched_tests[] = {
|
||||
KUNIT_CASE(drm_sched_test_modify_sched),
|
||||
{}
|
||||
};
|
||||
|
||||
static struct kunit_suite drm_sched_modify_sched = {
|
||||
.name = "drm_sched_basic_modify_sched_tests",
|
||||
.test_cases = drm_sched_modify_sched_tests,
|
||||
};
|
||||
|
||||
kunit_test_suites(&drm_sched_basic,
|
||||
&drm_sched_timeout,
|
||||
&drm_sched_priority);
|
||||
&drm_sched_priority,
|
||||
&drm_sched_modify_sched);
|
||||
|
||||
Reference in New Issue
Block a user