From af3312a8c62796b26c47e0ff470b64d9c27c2673 Mon Sep 17 00:00:00 2001 From: Arkadiusz Miskiewicz Date: Wed, 28 Jul 2004 09:13:29 -0700 Subject: [PATCH] [PATCH] convert ipmi_watchdog to use module option nowayout Convert ipmi_watchdog to also use module option `nowayout' as is done in other watchdog drivers. From: Corey Minyard The patch is good (same style as other watchdogs), but needs to have some documentation updated. I've tacked that on. Signed-off-by: Arkadiusz Miskiewicz Signed-off-by: Corey Minyard Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- Documentation/IPMI.txt | 6 ++++++ drivers/char/ipmi/ipmi_watchdog.c | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Documentation/IPMI.txt b/Documentation/IPMI.txt index ec8a6fa2c34b2..583eb0d58b25d 100644 --- a/Documentation/IPMI.txt +++ b/Documentation/IPMI.txt @@ -442,6 +442,7 @@ used to control it: modprobe ipmi_watchdog timeout= pretimeout= action= preaction= preop= start_now=x + nowayout=x The timeout is the number of seconds to the action, and the pretimeout is the amount of seconds before the reset that the pre-timeout panic will @@ -472,6 +473,10 @@ the device, as well. If start_now is set to 1, the watchdog timer will start running as soon as the driver is loaded. +If nowayout is set to 1, the watchdog timer will not stop when the +watchdog device is closed. The default value of nowayout is true +if the CONFIG_WATCHDOG_NOWAYOUT option is enabled, or false if not. + When compiled into the kernel, the kernel command line is available for configuring the watchdog: @@ -480,6 +485,7 @@ for configuring the watchdog: ipmi_watchdog.preaction= ipmi_watchdog.preop= ipmi_watchdog.start_now=x + ipmi_watchdog.nowayout=x The options are the same as the module parameter options. diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c index f128109082b35..59cf9b4083590 100644 --- a/drivers/char/ipmi/ipmi_watchdog.c +++ b/drivers/char/ipmi/ipmi_watchdog.c @@ -129,6 +129,12 @@ #define WDIOC_GET_PRETIMEOUT _IOW(WATCHDOG_IOCTL_BASE, 22, int) #endif +#ifdef CONFIG_WATCHDOG_NOWAYOUT +static int nowayout = 1; +#else +static int nowayout; +#endif + static ipmi_user_t watchdog_user = NULL; /* Default the timeout to 10 seconds. */ @@ -175,6 +181,8 @@ MODULE_PARM_DESC(preop, "Pretimeout driver operation. One of: " module_param(start_now, int, 0); MODULE_PARM_DESC(start_now, "Set to 1 to start the watchdog as" "soon as the driver is loaded."); +module_param(nowayout, int, 0); +MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)"); /* Default state of the timer. */ static unsigned char ipmi_watchdog_state = WDOG_TIMEOUT_NONE; @@ -704,10 +712,10 @@ static int ipmi_close(struct inode *ino, struct file *filep) { if (iminor(ino)==WATCHDOG_MINOR) { -#ifndef CONFIG_WATCHDOG_NOWAYOUT - ipmi_watchdog_state = WDOG_TIMEOUT_NONE; - ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB); -#endif + if (!nowayout) { + ipmi_watchdog_state = WDOG_TIMEOUT_NONE; + ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB); + } ipmi_wdog_open = 0; } -- 2.53.0