]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
watchdog: realtek-otto: prevent PHASE2 underflows
authorSander Vanheule <sander@svanheule.net>
Fri, 15 May 2026 21:23:50 +0000 (23:23 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Sat, 16 May 2026 17:36:34 +0000 (10:36 -0700)
commit05d871c5194bef01b525ca9289efb736bbfd6ece
tree959ef650000fc782eaea82f0ffd7d8524a1da183
parentf83da91c7e038c8753c44a85dc9fe2fcf68db17a
watchdog: realtek-otto: prevent PHASE2 underflows

For small pretimeout values, ((timeout - pretimeout) / tick) might be
rounded up to the same value as (timeout / tick). As a result, the
number of PHASE2 ticks may be zero, causing an underflow when
subtracting 1 to configure the hardware. While this results in a
longer-than-expected time to system reset, the duration of PHASE1 and
minimum ping interval for the watchdog would still be correct.

As the watchdog core ensures pretimeout is strictly less than timeout,
ceil(timeout / tick) is strictly greater than floor(pretimeout / tick)
and the number of PHASE1 ticks cannot be 0. So instead of rounding up
the number of PHASE1 ticks, we can round down the number of PHASE2
ticks, maintaining the current behavior while avoiding underflows.

The original helper function is now inlined, as it doesn't save any
duplication anymore.

Signed-off-by: Sander Vanheule <sander@svanheule.net>
Link: https://lore.kernel.org/r/20260515212351.752054-2-sander@svanheule.net
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/watchdog/realtek_otto_wdt.c