[OpenWrt-Devel] [PATCH procd] watchdog: shutdown the kernel watchdog when stopping
Alexander Couzens
lynxis at fe80.eu
Sun Sep 27 18:58:02 EDT 2015
The kernel wdt counting down even when not pinged.
Shutdown the filehandler to /dev/watchdog with magic cookie
to prevent this.
Signed-off-by: Alexander Couzens <lynxis at fe80.eu>
---
watchdog.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
I'm not certainly clear, the previous behaviour was a bug or feature.
If stop=True should really only stop the pinging thread, I really would like
to shutdown the watchdog gracefully on another way. E.g. with another argument
shutdown.
Best lynxis
diff --git a/watchdog.c b/watchdog.c
index 592ae7e..025942b 100644
--- a/watchdog.c
+++ b/watchdog.c
@@ -45,11 +45,23 @@ static void watchdog_timeout_cb(struct uloop_timeout *t)
uloop_timeout_set(t, wdt_frequency * 1000);
}
+static void watchdog_stop()
+{
+ if (wdt_fd >= 0 && write(wdt_fd, "V", 1) < 0)
+ ERROR("WDT failed to write magic close sequence: %s\n"
+ "WDT may not stopped properly.\n", strerror(errno));
+ if (close(wdt_fd) < 0)
+ ERROR("WDT failed to close watchdog fd: %s\n"
+ "WDT may not stopped properly.\n", strerror(errno));
+ wdt_fd = -1;
+}
+
void watchdog_set_stopped(bool val)
{
- if (val)
+ if (val) {
uloop_timeout_cancel(&wdt_timeout);
- else
+ watchdog_stop();
+ } else
watchdog_timeout_cb(&wdt_timeout);
}
@@ -125,7 +137,6 @@ void watchdog_init(int preinit)
DEBUG(4, "Opened watchdog with timeout %ds\n", watchdog_timeout(0));
}
-
void watchdog_no_cloexec(void)
{
if (wdt_fd < 0)
--
2.5.3
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list