Re: [PATCH] drm/sched: Increase drm_mock_sched_job_wait_finished timeout when CONFIG_HZ=100

From: Tvrtko Ursulin

Date: Mon Sep 14 2026 - 07:22:23 EST



On 14/09/2026 11:06, David Gow wrote:
Le 14/09/2026 à 4:49 PM, Tvrtko Ursulin a écrit :

On 13/09/2026 09:41, David Gow wrote:
The drm_sched_scheduler_overhead_tests tests hardcode a timeout of 5x
total_us, and fail if it's exceeded. However, on systems with
CONFIG_HZ < 250, this tends to fail.

Systems plural or just UML? I suppose if no hrtimer support and low HZ
it is plausible since executing the tests needs 1000 x 1ms hrtimer
callbacks to fire.

UML is the most important of the ones I tested (as it doesn't have a way
to increase HZ, though it did pass if I manually forced CONFIG_HZ=1000),
but even x86/x86_64 will trigger this if CONFIG_HZ_100=y.

For example, I can reproduce it with:
./tools/testing/kunit/kunit.py run --arch x86_64 --kconfig_add CONFIG_DRM=y --kconfig_add CONFIG_HZ_100=y drm_sched_scheduler_overhead_tests

Right, I even developed the tests with that setup, just under arm64 and the default HZ=250.
>> Anyway, increasing the tolerance is okay-ish, with the -ish part being
that it would be even better to skip if test could know before hand on a
particular system it would be uselessly slow. Hence I am curious whether
it is just UML or you could point me to other specific platforms/kconfig
combinations where you saw it fail. In which case maybe we can come up
with a skip criteria.

I saw it passing relatively consistently on x86 (under qemu) with
CONFIG_HZ=250, and failing consistently on everything with
CONFIG_HZ=100.
I don't think it'd be a problem to either have the test depend
on CONFIG_HZ >= 250 or use that as criteria to skip the test
altogether.

I'm happy to send out a v2 of this patch which just uses the same
criteria (CONFIG_HZ < 250) to just skip the test if you'd prefer.

I suspect the real condition would be HZ < 250 && something-like-!hrtimer_highres_enabled, but as the latter is not exported for modules I have no smart ideas. It's not a loss really to skip the scheduling quality tests on more platforms than strictly required so I'd say lets go with that.

Regards,

Tvrtko

As it's possible to configure many architectures to use 100 Hz (and some,
such as UML, hardcode CONFIG_HZ=100), increase the timeout so that the
test
doesn't fail on these configurations.

Fixes: 97ef806a5314 ("drm/sched: Add some scheduling quality unit tests")
Signed-off-by: David Gow <david@xxxxxxxxxxxx>
---

This failure showed up on UML when testing the addition of CONFIG_DRM to
the KUnit 'alltests' config[1]. Ideally, I'd like to see this test fixed
(or at least skipped/disabled) on these broken configurations so that the
alltests run is clean. (I don't actually run any CONFIG_HZ=100 configs
other than UML, but fixing them all is ideal if we can manage it.)

If you'd rather a different implementation / magic number, let me know.
I picked 15 here as it gave me plenty of leeway: 10 worked most, but not
all, of the time under i386 qemu w/ CONFIG_HZ_100, and was fine with UML
on this machine.

Thanks,
-- David

[1]: https://lore.kernel.org/all/20260911-kunit-drm-v1-1-
c5c0f18fc7b0@xxxxxxxxxx/
---
  drivers/gpu/drm/scheduler/tests/tests_scheduler.c | 11 +++++++++--
  1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/scheduler/tests/tests_scheduler.c b/
drivers/gpu/drm/scheduler/tests/tests_scheduler.c
index 285546a2218f..02c83b5c2189 100644
--- a/drivers/gpu/drm/scheduler/tests/tests_scheduler.c
+++ b/drivers/gpu/drm/scheduler/tests/tests_scheduler.c
@@ -13,6 +13,13 @@
   * logic.
   */
  +/* We need a more generous timeout when CONFIG_HZ=100. */
+#if CONFIG_HZ < 250
+#define TIMEOUT_MULTIPLIER 15
+#else
+#define TIMEOUT_MULTIPLIER 5
+#endif
+
  static int drm_sched_scheduler_init(struct kunit *test)
  {
      struct drm_mock_scheduler *sched;
@@ -88,7 +95,7 @@ static void
drm_sched_scheduler_queue_overhead(struct kunit *test)
        /* Wait with a safe margin to avoid every failing. */
      done = drm_mock_sched_job_wait_finished(job,
-                        usecs_to_jiffies(total_us) * 5);
+                        usecs_to_jiffies(total_us) *
TIMEOUT_MULTIPLIER);
      end = ktime_get();
      KUNIT_ASSERT_TRUE(test, done);
  @@ -149,7 +156,7 @@ static void drm_sched_scheduler_ping_pong(struct
kunit *test)
        /* Wait with a safe margin to avoid every failing. */
      done = drm_mock_sched_job_wait_finished(job,
-                        usecs_to_jiffies(total_us) * 5);
+                        usecs_to_jiffies(total_us) *
TIMEOUT_MULTIPLIER);
      end = ktime_get();
      KUNIT_ASSERT_TRUE(test, done);