Message ID | 20210124114938.373885-1-tomas.winkler@intel.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [watchdog,v2] watchdog: mei_wdt: request stop on unregister | expand |
On Sun, Jan 24, 2021 at 01:49:38PM +0200, Tomas Winkler wrote: > From: Alexander Usyskin <alexander.usyskin@intel.com> > > The MEI bus has a special behavior on suspend it destroys > all the attached devices, this is due to the fact that also > firmware context is not persistent across power flows. > > If watchdog on MEI bus is ticking before suspending the firmware > times out and reports that the OS is missing watchdog tick. > Send the stop command to the firmware on watchdog unregistered > to eliminate the false event on suspend. > This does not make the things worse from the user-space perspective > as a user-space should re-open watchdog device after > suspending before this patch. > > Cc: <stable@vger.kernel.org> > Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> > Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > V2: Update the commit message with better explanation > > drivers/watchdog/mei_wdt.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/watchdog/mei_wdt.c b/drivers/watchdog/mei_wdt.c > index 5391bf3e6b11..c5967d8b4256 100644 > --- a/drivers/watchdog/mei_wdt.c > +++ b/drivers/watchdog/mei_wdt.c > @@ -382,6 +382,7 @@ static int mei_wdt_register(struct mei_wdt *wdt) > > watchdog_set_drvdata(&wdt->wdd, wdt); > watchdog_stop_on_reboot(&wdt->wdd); > + watchdog_stop_on_unregister(&wdt->wdd); > > ret = watchdog_register_device(&wdt->wdd); > if (ret) > -- > 2.26.2 >
diff --git a/drivers/watchdog/mei_wdt.c b/drivers/watchdog/mei_wdt.c index 5391bf3e6b11..c5967d8b4256 100644 --- a/drivers/watchdog/mei_wdt.c +++ b/drivers/watchdog/mei_wdt.c @@ -382,6 +382,7 @@ static int mei_wdt_register(struct mei_wdt *wdt) watchdog_set_drvdata(&wdt->wdd, wdt); watchdog_stop_on_reboot(&wdt->wdd); + watchdog_stop_on_unregister(&wdt->wdd); ret = watchdog_register_device(&wdt->wdd); if (ret)