mirror of
https://github.com/torvalds/linux.git
synced 2026-09-13 14:44:42 +02:00
watchdog: msc313e: Fix spurious reset on suspend
If the hardware watchdog was started by the bootloader and the device is
suspended before userspace opens it, the ping worker (from watchdog
core) is frozen and the active hardware timer continues running. This
leads to a spurious system reset.
Check both watchdog_active() and watchdog_hw_running() when deciding
whether to start or stop the watchdog during suspend and resume.
Additionally, call watchdog_stop_ping_on_suspend() to ensure the ping
worker be correctly paused and restarted during suspend and resume.
Fixes: ffd264bd15 ("watchdog: msc313e: Check if the WDT was running at boot")
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
Link: https://patch.msgid.link/20260828161348.13212-6-tzungbi@kernel.org
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
3db2df24e7
commit
4f6817c9ef
|
|
@ -156,6 +156,7 @@ static int msc313e_wdt_probe(struct platform_device *pdev)
|
|||
watchdog_init_timeout(&priv->wdev, timeout, dev);
|
||||
watchdog_stop_on_reboot(&priv->wdev);
|
||||
watchdog_stop_on_unregister(&priv->wdev);
|
||||
watchdog_stop_ping_on_suspend(&priv->wdev);
|
||||
|
||||
ret = devm_watchdog_register_device(dev, &priv->wdev);
|
||||
|
||||
|
|
@ -170,7 +171,7 @@ static int __maybe_unused msc313e_wdt_suspend(struct device *dev)
|
|||
{
|
||||
struct msc313e_wdt_priv *priv = dev_get_drvdata(dev);
|
||||
|
||||
if (watchdog_active(&priv->wdev))
|
||||
if (watchdog_active(&priv->wdev) || watchdog_hw_running(&priv->wdev))
|
||||
msc313e_wdt_stop(&priv->wdev);
|
||||
|
||||
return 0;
|
||||
|
|
@ -180,7 +181,7 @@ static int __maybe_unused msc313e_wdt_resume(struct device *dev)
|
|||
{
|
||||
struct msc313e_wdt_priv *priv = dev_get_drvdata(dev);
|
||||
|
||||
if (watchdog_active(&priv->wdev))
|
||||
if (watchdog_active(&priv->wdev) || watchdog_hw_running(&priv->wdev))
|
||||
msc313e_wdt_start(&priv->wdev);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user