Message ID | 20220818020624.2386475-1-aklimov@redhat.com |
---|---|
State | New |
Headers | show |
Series | [REVIEW,1/2] watchdog: extend the mutex-protected section in watchdog_cdev_unregister() | expand |
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c index 54903f3c851e..804236a094f6 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c @@ -1095,6 +1095,8 @@ static void watchdog_cdev_unregister(struct watchdog_device *wdd) old_wd_data = NULL; } + mutex_lock(&wd_data->lock); + if (watchdog_active(wdd) && test_bit(WDOG_STOP_ON_UNREGISTER, &wdd->status)) { watchdog_stop(wdd); @@ -1102,7 +1104,6 @@ static void watchdog_cdev_unregister(struct watchdog_device *wdd) watchdog_hrtimer_pretimeout_stop(wdd); - mutex_lock(&wd_data->lock); wd_data->wdd = NULL; wdd->wd_data = NULL; mutex_unlock(&wd_data->lock);
watchdog_stop() should be called with wd_data->lock mutex locked. Updates to wdd->status also occur under this look throughout the watchdog_dev.c as well as functions that deal with pretimeout hrtimer like watchdog_hrtimer_pretimeout_stop() here. Signed-off-by: Alexey Klimov <aklimov@redhat.com> --- drivers/watchdog/watchdog_dev.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)