|
@@ -17,23 +17,6 @@
|
|
|
*
|
|
*
|
|
|
* Software only watchdog driver. Unlike its big brother the WDT501P
|
|
* Software only watchdog driver. Unlike its big brother the WDT501P
|
|
|
* driver this won't always recover a failed machine.
|
|
* driver this won't always recover a failed machine.
|
|
|
- *
|
|
|
|
|
- * 03/96: Angelo Haritsis <ah@doc.ic.ac.uk> :
|
|
|
|
|
- * Modularised.
|
|
|
|
|
- * Added soft_margin; use upon insmod to change the timer delay.
|
|
|
|
|
- * NB: uses same minor as wdt (WATCHDOG_MINOR); we could use separate
|
|
|
|
|
- * minors.
|
|
|
|
|
- *
|
|
|
|
|
- * 19980911 Alan Cox
|
|
|
|
|
- * Made SMP safe for 2.3.x
|
|
|
|
|
- *
|
|
|
|
|
- * 20011127 Joel Becker (jlbec@evilplan.org>
|
|
|
|
|
- * Added soft_noboot; Allows testing the softdog trigger without
|
|
|
|
|
- * requiring a recompile.
|
|
|
|
|
- * Added WDIOC_GETTIMEOUT and WDIOC_SETTIMOUT.
|
|
|
|
|
- *
|
|
|
|
|
- * 20020530 Joel Becker <joel.becker@oracle.com>
|
|
|
|
|
- * Added Matt Domsch's nowayout module option.
|
|
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
@@ -71,19 +54,11 @@ module_param(soft_panic, int, 0);
|
|
|
MODULE_PARM_DESC(soft_panic,
|
|
MODULE_PARM_DESC(soft_panic,
|
|
|
"Softdog action, set to 1 to panic, 0 to reboot (default=0)");
|
|
"Softdog action, set to 1 to panic, 0 to reboot (default=0)");
|
|
|
|
|
|
|
|
-/*
|
|
|
|
|
- * Our timer
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
static void watchdog_fire(unsigned long);
|
|
static void watchdog_fire(unsigned long);
|
|
|
|
|
|
|
|
static struct timer_list watchdog_ticktock =
|
|
static struct timer_list watchdog_ticktock =
|
|
|
TIMER_INITIALIZER(watchdog_fire, 0, 0);
|
|
TIMER_INITIALIZER(watchdog_fire, 0, 0);
|
|
|
|
|
|
|
|
-/*
|
|
|
|
|
- * If the timer expires..
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
static void watchdog_fire(unsigned long data)
|
|
static void watchdog_fire(unsigned long data)
|
|
|
{
|
|
{
|
|
|
module_put(THIS_MODULE);
|
|
module_put(THIS_MODULE);
|
|
@@ -99,10 +74,6 @@ static void watchdog_fire(unsigned long data)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/*
|
|
|
|
|
- * Softdog operations
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
static int softdog_ping(struct watchdog_device *w)
|
|
static int softdog_ping(struct watchdog_device *w)
|
|
|
{
|
|
{
|
|
|
if (!mod_timer(&watchdog_ticktock, jiffies+(w->timeout*HZ)))
|
|
if (!mod_timer(&watchdog_ticktock, jiffies+(w->timeout*HZ)))
|
|
@@ -124,10 +95,6 @@ static int softdog_set_timeout(struct watchdog_device *w, unsigned int t)
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/*
|
|
|
|
|
- * Kernel Interfaces
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
static struct watchdog_info softdog_info = {
|
|
static struct watchdog_info softdog_info = {
|
|
|
.identity = "Software Watchdog",
|
|
.identity = "Software Watchdog",
|
|
|
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
|
|
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
|