On Fri, Feb 28, 2020 at 04:23:29PM +0200, Tero Kristo wrote: > Current watchdog core pets the timer always after the initial keepalive > time has expired from boot-up. This is incorrect for certain timers that > don't like to be petted immediately when they are started, if they have > not been running over the boot. > > To allow drivers to reset their keepalive timers during startup, add > a new watchdog flag to the api, WDOG_RESET_KEEPALIVE. > > Signed-off-by: Tero Kristo <t-kristo@xxxxxx> > --- > drivers/watchdog/watchdog_dev.c | 2 ++ > include/linux/watchdog.h | 1 + > 2 files changed, 3 insertions(+) > > diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c > index 8b5c742f24e8..131e40c21703 100644 > --- a/drivers/watchdog/watchdog_dev.c > +++ b/drivers/watchdog/watchdog_dev.c > @@ -283,6 +283,8 @@ static int watchdog_start(struct watchdog_device *wdd) > set_bit(WDOG_ACTIVE, &wdd->status); > wd_data->last_keepalive = started_at; > watchdog_update_worker(wdd); > + if (test_bit(WDOG_RESET_KEEPALIVE, &wdd->status)) > + wd_data->last_hw_keepalive = started_at; I don't think the additional flag is needed. The code should just set last_hw_keepalive. After all, it already sets last_keepalive, which determines when the next internal keepalive will be sent. It makes sense to also set last_hw_keepalive to prevent the next keepalive from being sent too early. Guenter