timers: Add a warning to usleep_range_state() for wrong order of arguments
authorAnna-Maria Behnsen <anna-maria@linutronix.de>
Mon, 14 Oct 2024 08:22:26 +0000 (10:22 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 15 Oct 2024 22:36:47 +0000 (00:36 +0200)
There is a warning in checkpatch script that triggers, when min and max
arguments of usleep_range_state() are in reverse order. This check does
only cover callsites which uses constants. Add this check into the code as
a WARN_ON_ONCE() to also cover callsites not using constants and fix the
mis-usage by resetting the delta to 0.

Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Link: https://lore.kernel.org/all/20241014-devel-anna-maria-b4-timers-flseep-v3-9-dc8b907cb62f@linutronix.de
kernel/time/sleep_timeout.c

index f3f246e4c8d1a5b0b8e30ecf7f83f49d2b9569a6..3054e5232d208fdb9d782d196a95ca389ae4de45 100644 (file)
@@ -364,6 +364,9 @@ void __sched usleep_range_state(unsigned long min, unsigned long max, unsigned i
        ktime_t exp = ktime_add_us(ktime_get(), min);
        u64 delta = (u64)(max - min) * NSEC_PER_USEC;
 
+       if (WARN_ON_ONCE(max < min))
+               delta = 0;
+
        for (;;) {
                __set_current_state(state);
                /* Do not return before the requested sleep time has elapsed */