diff options
-rw-r--r-- | drivers/watchdog/watchdog_dev.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c index 4bc7ab60b12c..0826e663bd5a 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c | |||
@@ -195,18 +195,23 @@ static int watchdog_ping(struct watchdog_device *wdd) | |||
195 | return __watchdog_ping(wdd); | 195 | return __watchdog_ping(wdd); |
196 | } | 196 | } |
197 | 197 | ||
198 | static bool watchdog_worker_should_ping(struct watchdog_core_data *wd_data) | ||
199 | { | ||
200 | struct watchdog_device *wdd = wd_data->wdd; | ||
201 | |||
202 | return wdd && (watchdog_active(wdd) || watchdog_hw_running(wdd)); | ||
203 | } | ||
204 | |||
198 | static void watchdog_ping_work(struct work_struct *work) | 205 | static void watchdog_ping_work(struct work_struct *work) |
199 | { | 206 | { |
200 | struct watchdog_core_data *wd_data; | 207 | struct watchdog_core_data *wd_data; |
201 | struct watchdog_device *wdd; | ||
202 | 208 | ||
203 | wd_data = container_of(to_delayed_work(work), struct watchdog_core_data, | 209 | wd_data = container_of(to_delayed_work(work), struct watchdog_core_data, |
204 | work); | 210 | work); |
205 | 211 | ||
206 | mutex_lock(&wd_data->lock); | 212 | mutex_lock(&wd_data->lock); |
207 | wdd = wd_data->wdd; | 213 | if (watchdog_worker_should_ping(wd_data)) |
208 | if (wdd && (watchdog_active(wdd) || watchdog_hw_running(wdd))) | 214 | __watchdog_ping(wd_data->wdd); |
209 | __watchdog_ping(wdd); | ||
210 | mutex_unlock(&wd_data->lock); | 215 | mutex_unlock(&wd_data->lock); |
211 | } | 216 | } |
212 | 217 | ||