watchdog: Always evaluate new timeout against min_timeout
authorGuenter Roeck <linux@roeck-us.net>
Tue, 29 Sep 2015 08:27:24 +0000 (01:27 -0700)
committerWim Van Sebroeck <wim@iguana.be>
Tue, 3 Nov 2015 13:34:22 +0000 (14:34 +0100)
Up to now, a new timeout value is only evaluated against min_timeout
if max_timeout is provided. This does not really make sense; a driver
can have a minimum timeout even if it does not have a maximum timeout.
Ensure that it is not smaller than min_timeout, even if max_timeout
is not set.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
include/linux/watchdog.h

index d74a0e907b9e761472662ec17c4e167448028983..e90e3ea5ebebcbe69fe2dbb1072c927c0ceb5746 100644 (file)
@@ -119,8 +119,15 @@ static inline void watchdog_set_nowayout(struct watchdog_device *wdd, bool noway
 /* Use the following function to check if a timeout value is invalid */
 static inline bool watchdog_timeout_invalid(struct watchdog_device *wdd, unsigned int t)
 {
-       return ((wdd->max_timeout != 0) &&
-               (t < wdd->min_timeout || t > wdd->max_timeout));
+       /*
+        * The timeout is invalid if
+        * - the requested value is smaller than the configured minimum timeout,
+        * or
+        * - a maximum timeout is configured, and the requested value is larger
+        *   than the maximum timeout.
+        */
+       return t < wdd->min_timeout ||
+               (wdd->max_timeout && t > wdd->max_timeout);
 }
 
 /* Use the following functions to manipulate watchdog driver specific data */