aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/watchdog/watchdog_dev.c13
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
198static 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
198static void watchdog_ping_work(struct work_struct *work) 205static 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