On 4/6/21 2:44 AM, Wang Qing wrote: > Although softdog supports pretimeout, there is no way to set pretimeout, > so pretimeout will never be processed in softdog_ping(). > This is wrong. The pretimeout can be set using WDIOC_SETPRETIMEOUT, as with every other driver supporting it. There is no need for a module parameter. Guenter > Here add the configuration mechanism for pretimeout and the default value > is 1 second, so when CONFIG_SOFT_WATCHDOG_PRETIMEOUT is enabled, the > pretimeout function defaults available. > > Signed-off-by: Wang Qing <wangqing@xxxxxxxx> > --- > drivers/watchdog/softdog.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/watchdog/softdog.c b/drivers/watchdog/softdog.c > index 7a10962..79e52791 > --- a/drivers/watchdog/softdog.c > +++ b/drivers/watchdog/softdog.c > @@ -35,6 +35,14 @@ MODULE_PARM_DESC(soft_margin, > "Watchdog soft_margin in seconds. (0 < soft_margin < 65536, default=" > __MODULE_STRING(TIMER_MARGIN) ")"); > > +#ifdef CONFIG_SOFT_WATCHDOG_PRETIMEOUT > +#define PRE_TIMER_MARGIN 1 /* Default is 1 seconds */ > +static unsigned int soft_pretimeout = PRE_TIMER_MARGIN; /* in seconds */ > +module_param(soft_pretimeout, uint, 0); > +MODULE_PARM_DESC(soft_pretimeout, > + "Watchdog soft_pretimeout in seconds. (0 < soft_pretimeout < soft_margin, default=1)"); > +#endif > + > static bool nowayout = WATCHDOG_NOWAYOUT; > module_param(nowayout, bool, 0); > MODULE_PARM_DESC(nowayout, > @@ -177,6 +185,9 @@ static struct watchdog_device softdog_dev = { > .min_timeout = 1, > .max_timeout = 65535, > .timeout = TIMER_MARGIN, > +#ifdef CONFIG_SOFT_WATCHDOG_PRETIMEOUT > + .pretimeout = PRE_TIMER_MARGIN, > +#endif > }; > > static int __init softdog_init(void) >