There has repeatedly been quite a bit of apprehension when any change to the DRM scheduler is proposed, with two main reasons being code base is considered fragile, not well understood and not very well documented, and secondly the lack of systematic testing outside the vendor specific tests suites and/or test farms. This RFC is an attempt to dislodge this status quo by adding some unit tests using the kunit framework. General approach is that there is a mock "hardware" backend which can be controlled from tests, which in turn allows exercising various scheduler code paths. I am sending this early as an RFC so we can get alignment on the general idea and high level approach. Once past that point we can polish and then hopefully people can go crazy and start adding more advanced tests, testing corner cases and what not. Only some simple basic tests get added in the series and hopefully it is easy to understand what tests are doing. My usage of the kunit framework may not be perfect though, since this series is my first attempt to use it. An obligatory "screenshot" for reference: [15:16:33] ============ drm_sched_basic_tests (6 subtests) ============ [15:16:33] [PASSED] drm_sched_basic_submit [15:16:33] [PASSED] drm_sched_basic_queue [15:16:34] [PASSED] drm_sched_basic_chain [15:16:34] [PASSED] drm_sched_basic_entities [15:16:34] [PASSED] drm_sched_basic_entities_chain [15:16:34] [PASSED] drm_sched_basic_entity_cleanup [15:16:34] ============== [PASSED] drm_sched_basic_tests ============== [15:16:34] ========== drm_sched_basic_tdr_tests (1 subtest) =========== [15:16:36] [PASSED] drm_sched_basic_tdr [15:16:36] ============ [PASSED] drm_sched_basic_tdr_tests ============ [15:16:36] ======= drm_sched_basic_priority_tests (2 subtests) ======== [15:16:37] [PASSED] drm_sched_priorities [15:16:37] [PASSED] drm_sched_change_priority [15:16:37] ========= [PASSED] drm_sched_basic_priority_tests ========== [15:16:37] ====== drm_sched_basic_modify_sched_tests (1 subtest) ====== [15:16:39] [PASSED] drm_sched_test_modify_sched [15:16:39] ======= [PASSED] drm_sched_basic_modify_sched_tests ======== [15:16:39] ============================================================ [15:16:39] Testing complete. Ran 10 tests: passed: 10 [15:16:39] Elapsed time: 13.442s total, 0.001s configuring, 4.117s building, 9.248s running Cc: Christian König <christian.koenig@xxxxxxx> Cc: Danilo Krummrich <dakr@xxxxxxxxxx> Cc: Matthew Brost <matthew.brost@xxxxxxxxx> Cc: Philipp Stanner <phasta@xxxxxxxxxx> Tvrtko Ursulin (5): drm: Move some options to separate new Kconfig.debug drm/scheduler: Add scheduler unit testing infrastructure and some basic tests drm/scheduler: Add a simple TDR test drm/scheduler: Add basic priority tests drm/scheduler: Add a basic test for modifying entities scheduler list drivers/gpu/drm/Kconfig | 98 +--- drivers/gpu/drm/Kconfig.debug | 104 ++++ drivers/gpu/drm/scheduler/.kunitconfig | 12 + drivers/gpu/drm/scheduler/Makefile | 1 + drivers/gpu/drm/scheduler/tests/Makefile | 4 + .../gpu/drm/scheduler/tests/drm_mock_entity.c | 29 ++ .../gpu/drm/scheduler/tests/drm_mock_job.c | 3 + .../drm/scheduler/tests/drm_mock_scheduler.c | 260 ++++++++++ .../gpu/drm/scheduler/tests/drm_sched_tests.h | 128 +++++ .../scheduler/tests/drm_sched_tests_basic.c | 464 ++++++++++++++++++ 10 files changed, 1010 insertions(+), 93 deletions(-) create mode 100644 drivers/gpu/drm/Kconfig.debug create mode 100644 drivers/gpu/drm/scheduler/.kunitconfig create mode 100644 drivers/gpu/drm/scheduler/tests/Makefile create mode 100644 drivers/gpu/drm/scheduler/tests/drm_mock_entity.c create mode 100644 drivers/gpu/drm/scheduler/tests/drm_mock_job.c create mode 100644 drivers/gpu/drm/scheduler/tests/drm_mock_scheduler.c create mode 100644 drivers/gpu/drm/scheduler/tests/drm_sched_tests.h create mode 100644 drivers/gpu/drm/scheduler/tests/drm_sched_tests_basic.c -- 2.48.0