aboutsummaryrefslogtreecommitdiff
path: root/drivers/watchdog
diff options
context:
space:
mode:
authorGravatar Guenter Roeck <linux@roeck-us.net> 2017-01-25 14:21:10 -0800
committerGravatar Guenter Roeck <linux@roeck-us.net> 2017-02-24 14:00:23 -0800
commitbb292ac1c6028344013309a309b44dc691581825 (patch)
treeb4f36b0a8cf8a8c23026c1f12c2719bd96f53d55 /drivers/watchdog
parentwatchdog: ebc-c384_wdt: Utilize devm_ functions in driver probe callback (diff)
downloadlinux-bb292ac1c6028344013309a309b44dc691581825.tar.gz
linux-bb292ac1c6028344013309a309b44dc691581825.tar.bz2
linux-bb292ac1c6028344013309a309b44dc691581825.zip
watchdog: Introduce watchdog_stop_on_unregister helper
Many watchdog drivers explicitly stop the watchdog when unregistering it. While it is unclear if this is actually needed (the whatdog should not be running at that time if it can be stopped), introduce a helper to explicitly stop the watchdog in the watchdog core when unregistering it. This helps reducing driver code size while retaining functionality. Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r--drivers/watchdog/watchdog_dev.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index 32930a073a12..d5d2bbd8f428 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -987,6 +987,11 @@ static void watchdog_cdev_unregister(struct watchdog_device *wdd)
wdd->wd_data = NULL;
mutex_unlock(&wd_data->lock);
+ if (watchdog_active(wdd) &&
+ test_bit(WDOG_STOP_ON_UNREGISTER, &wdd->status)) {
+ watchdog_stop(wdd);
+ }
+
cancel_delayed_work_sync(&wd_data->work);
kref_put(&wd_data->kref, watchdog_core_data_release);