When the nowayout option is used with a watchdog device, busybox' current behaviour of always doing a open/write magic char/close sequence before the "real" open causes warning messages in the kernel log:
[ 16.212184] watchdog: watchdog0: nowayout prevents watchdog being stopped! [ 16.212196] watchdog: watchdog0: watchdog did not stop! The latter may also appear by itself in case the watchdog is of the type that cannot be stopped once started. These warnings can be somewhat ominous and distracting, so allow configuring whether to use this open-write-close-open sequence rather than just open. Also saves a bit of .text when disabled: function old new delta shutdown_on_signal 31 58 +27 watchdog_main 339 306 -33 shutdown_watchdog 34 - -34 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/1 up/down: 27/-67) Total: -40 bytes Signed-off-by: Rasmus Villemoes <[email protected]> --- miscutils/watchdog.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/miscutils/watchdog.c b/miscutils/watchdog.c index 0ed10bcf1..2a8ff2de6 100644 --- a/miscutils/watchdog.c +++ b/miscutils/watchdog.c @@ -18,6 +18,17 @@ //config: watchdog applet ever fails to write the magic character within a //config: certain amount of time, the watchdog device assumes the system has //config: hung, and will cause the hardware to reboot. +//config: +//config:config FEATURE_WATCHDOG_OPEN_TWICE +//config: bool "Open watchdog device twice, closing it gracefully in between" +//config: depends on WATCHDOG +//config: default y +//config: help +//config: When enabled, the watchdog device is opened and then immediately +//config: magic-closed, before being opened a second time. This may be necessary +//config: for some watchdog devices, but can cause spurious warnings in the +//config: kernel log if the nowayout feature is enabled. Say n if you know +//config: you don't need this and want to avoid those spurious warnings. //applet:IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP)) @@ -73,6 +84,7 @@ static void watchdog_open(const char* device) /* Use known fd # - avoid needing global 'int fd' */ xmove_fd(xopen(device, O_WRONLY), 3); +#if ENABLE_FEATURE_WATCHDOG_OPEN_TWICE /* If the watchdog driver can do something other than cause a reboot * on a timeout, then it's possible this program may be starting from * a state when the watchdog hadn't been previously stopped with @@ -82,6 +94,7 @@ static void watchdog_open(const char* device) shutdown_watchdog(); xmove_fd(xopen(device, O_WRONLY), 3); +#endif } int watchdog_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -- 2.29.2 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
