On Thu, Jun 11, 2015 at 07:22:44PM +0800, Fu Wei wrote:
Hi Guenter,
[ ... ]
value we are trying to set. Effectively the above accepts every pretimeout if wdd->pretimeout is 0. It also accepts every pretimeout if max_pretimeout == 0, even if wdd->timeout is set and t >= wdd->timeout.
Try
return (wdd->max_pretimeout && (t < wdd->min_pretimeout || t > wdd->max_pretimeout)) || (wdd->timeout && t >= wdd->timeout);
}
/*
- Use the following function to check if a pretimeout value is invalid.
- It can be "0", that means we don't use pretimeout.
- This function returns 0, when pretimeout is 0.
returns false if pretimeout is 0.
*/ static inline bool watchdog_pretimeout_invalid(struct watchdog_device *wdd, unsigned int t) { return t && (wdd->max_pretimeout && (t < wdd->min_pretimeout || t > wdd->max_pretimeout)) || (wdd->timeout && t >= wdd->timeout); }
Makes sense. Be careful with (), though. This evaluates to
return t && (...) || (wdd->timeout && t >= wdd->timeout);
but it should probably be return t && ((...) || (wdd->timeout && t >= wdd->timeout));
That doesn't make a difference in practice (if t == 0, it is never >= timeout if timeout is > 0), but it would be a bit cleaner.
/* Use the following functions to manipulate watchdog driver specific data */ @@ -132,11 +153,20 @@ static inline void *watchdog_get_drvdata(struct watchdog_device *wdd) }
/* drivers/watchdog/watchdog_core.c */ -extern int watchdog_init_timeout(struct watchdog_device *wdd,
unsigned int timeout_parm, struct device
*dev); +int watchdog_init_timeouts(struct watchdog_device *wdd,
unsigned int pretimeout_parm,
unsigned int timeout_parm,
struct device *dev);
Please align continuation lines with '('.
Fixed , thanks
extern int watchdog_register_device(struct watchdog_device *); extern void watchdog_unregister_device(struct watchdog_device *);
+static inline int watchdog_init_timeout(struct watchdog_device *wdd,
unsigned int timeout_parm,
struct device *dev)
+{
return watchdog_init_timeouts(wdd, 0, timeout_parm, dev);
+}
- #ifdef CONFIG_HARDLOCKUP_DETECTOR void watchdog_nmi_disable_all(void); void watchdog_nmi_enable_all(void);
-- Best regards,
Fu Wei Software Engineer Red Hat Software (Beijing) Co.,Ltd.Shanghai Branch Ph: +86 21 61221326(direct) Ph: +86 186 2020 4684 (mobile) Room 1512, Regus One Corporate Avenue,Level 15, One Corporate Avenue,222 Hubin Road,Huangpu District, Shanghai,China 200021