Message ID | 93d56386-6e37-060b-55ce-84de8cde535f@web.de (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v2] watchdog: Start watchdog in watchdog_set_last_hw_keepalive only if appropriate | expand |
On 8/1/21 12:56 AM, Jan Kiszka wrote: > From: Jan Kiszka <jan.kiszka@siemens.com> > > We must not pet a running watchdog when handle_boot_enabled is off > because this will kick off automatic triggering before userland is > running, defeating the purpose of the handle_boot_enabled control. > Furthermore, don't ping in case watchdog_set_last_hw_keepalive was > called incorrectly when the hardware watchdog is actually not running. > > Fixed: cef9572e9af3 ("watchdog: add support for adjusting last known HW keepalive time") > Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > > Changes to v1 ("watchdog: Respect handle_boot_enabled when setting last last_hw_keepalive"): > - add watchdog_hw_running test > - improve commit log > > drivers/watchdog/watchdog_dev.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c > index 3bab32485273..6c73160386b9 100644 > --- a/drivers/watchdog/watchdog_dev.c > +++ b/drivers/watchdog/watchdog_dev.c > @@ -1172,7 +1172,10 @@ int watchdog_set_last_hw_keepalive(struct watchdog_device *wdd, > > wd_data->last_hw_keepalive = ktime_sub(now, ms_to_ktime(last_ping_ms)); > > - return __watchdog_ping(wdd); > + if (watchdog_hw_running(wdd) && handle_boot_enabled) > + return __watchdog_ping(wdd); > + > + return 0; > } > EXPORT_SYMBOL_GPL(watchdog_set_last_hw_keepalive); > > -- > 2.31.1 >
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c index 3bab32485273..6c73160386b9 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c @@ -1172,7 +1172,10 @@ int watchdog_set_last_hw_keepalive(struct watchdog_device *wdd, wd_data->last_hw_keepalive = ktime_sub(now, ms_to_ktime(last_ping_ms)); - return __watchdog_ping(wdd); + if (watchdog_hw_running(wdd) && handle_boot_enabled) + return __watchdog_ping(wdd); + + return 0; } EXPORT_SYMBOL_GPL(watchdog_set_last_hw_keepalive);