summaryrefslogtreecommitdiffstats
path: root/drivers/watchdog
diff options
context:
space:
mode:
authorDoug Anderson <dianders@chromium.org>2015-05-07 21:27:45 -0700
committerWim Van Sebroeck <wim@iguana.be>2015-06-22 15:54:31 +0200
commit04b1a62e6bb9b217847be874fe37a6b85ddff67e (patch)
tree7ab56d96da573300c4368c4e16eee13f39ae12e4 /drivers/watchdog
parent7fb466a7a7362de19b8f2aa07cffa79e527cf070 (diff)
downloadop-kernel-dev-04b1a62e6bb9b217847be874fe37a6b85ddff67e.zip
op-kernel-dev-04b1a62e6bb9b217847be874fe37a6b85ddff67e.tar.gz
watchdog: dw_wdt: keepalive the watchdog at write time
If you've got code that does this in a tight loop 1. Open watchdog 2. Send 'expect close' 3. Close watchdog ...you'll eventually trigger a watchdog reset. You can reproduce this by using daisydog (1) and running: while true; do daisydog -c > /dev/null; done The problem is that each time you write to the watchdog for 'expect close' it moves the timer .5 seconds out. The timer thus never fires and never pats the watchdog for you. 1: http://git.chromium.org/gitweb/?p=chromiumos/third_party/daisydog.git Signed-off-by: Doug Anderson <dianders@chromium.org> Tested-by: Jisheng Zhang <jszhang@marvell.com> Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r--drivers/watchdog/dw_wdt.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
index a284abd..6ea0634 100644
--- a/drivers/watchdog/dw_wdt.c
+++ b/drivers/watchdog/dw_wdt.c
@@ -215,6 +215,7 @@ static ssize_t dw_wdt_write(struct file *filp, const char __user *buf,
}
dw_wdt_set_next_heartbeat();
+ dw_wdt_keepalive();
mod_timer(&dw_wdt.timer, jiffies + WDT_TIMEOUT);
return len;
OpenPOWER on IntegriCloud