aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorey Minyard <minyard@acm.org>2006-04-19 16:40:53 -0400
committerWim Van Sebroeck <wim@iguana.be>2006-06-20 12:50:42 -0400
commite05b59fe7927bc648ac3af3d59dc64a7ee6b22e2 (patch)
tree845497dc08f3d506edfc3af2956f43e3f6d70472
parent427abfa28afedffadfca9dd8b067eb6d36bac53f (diff)
[WATCHDOG] Pre-Timeout flags
Some watchdog timers support the concept of a "pretimeout" which occurs some time before the real timeout. The pretimeout can be delivered via an interrupt or NMI and can be used to panic the system when it occurs (so you get useful information instead of a blind reboot). Signed-off-by: Corey Minyard <minyard@acm.org> Signed-off-by: Wim Van Sebroeck <wim@iguana.be> Signed-off-by: Andrew Morton <akpm@osdl.org>
-rw-r--r--Documentation/watchdog/watchdog-api.txt30
-rw-r--r--include/linux/watchdog.h3
2 files changed, 32 insertions, 1 deletions
diff --git a/Documentation/watchdog/watchdog-api.txt b/Documentation/watchdog/watchdog-api.txt
index 21ed51173662..7dc2c1c6f779 100644
--- a/Documentation/watchdog/watchdog-api.txt
+++ b/Documentation/watchdog/watchdog-api.txt
@@ -110,7 +110,31 @@ current timeout using the GETTIMEOUT ioctl.
110 ioctl(fd, WDIOC_GETTIMEOUT, &timeout); 110 ioctl(fd, WDIOC_GETTIMEOUT, &timeout);
111 printf("The timeout was is %d seconds\n", timeout); 111 printf("The timeout was is %d seconds\n", timeout);
112 112
113Envinronmental monitoring: 113Pretimeouts:
114
115Some watchdog timers can be set to have a trigger go off before the
116actual time they will reset the system. This can be done with an NMI,
117interrupt, or other mechanism. This allows Linux to record useful
118information (like panic information and kernel coredumps) before it
119resets.
120
121 pretimeout = 10;
122 ioctl(fd, WDIOC_SETPRETIMEOUT, &pretimeout);
123
124Note that the pretimeout is the number of seconds before the time
125when the timeout will go off. It is not the number of seconds until
126the pretimeout. So, for instance, if you set the timeout to 60 seconds
127and the pretimeout to 10 seconds, the pretimout will go of in 50
128seconds. Setting a pretimeout to zero disables it.
129
130There is also a get function for getting the pretimeout:
131
132 ioctl(fd, WDIOC_GETPRETIMEOUT, &timeout);
133 printf("The pretimeout was is %d seconds\n", timeout);
134
135Not all watchdog drivers will support a pretimeout.
136
137Environmental monitoring:
114 138
115All watchdog drivers are required return more information about the system, 139All watchdog drivers are required return more information about the system,
116some do temperature, fan and power level monitoring, some can tell you 140some do temperature, fan and power level monitoring, some can tell you
@@ -169,6 +193,10 @@ The watchdog saw a keepalive ping since it was last queried.
169 193
170 WDIOF_SETTIMEOUT Can set/get the timeout 194 WDIOF_SETTIMEOUT Can set/get the timeout
171 195
196The watchdog can do pretimeouts.
197
198 WDIOF_PRETIMEOUT Pretimeout (in seconds), get/set
199
172 200
173For those drivers that return any bits set in the option field, the 201For those drivers that return any bits set in the option field, the
174GETSTATUS and GETBOOTSTATUS ioctls can be used to ask for the current 202GETSTATUS and GETBOOTSTATUS ioctls can be used to ask for the current
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h
index 1192ed8f4fe8..a99c937f665e 100644
--- a/include/linux/watchdog.h
+++ b/include/linux/watchdog.h
@@ -28,6 +28,8 @@ struct watchdog_info {
28#define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int) 28#define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int)
29#define WDIOC_SETTIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 6, int) 29#define WDIOC_SETTIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 6, int)
30#define WDIOC_GETTIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 7, int) 30#define WDIOC_GETTIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 7, int)
31#define WDIOC_SETPRETIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 8, int)
32#define WDIOC_GETPRETIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 9, int)
31 33
32#define WDIOF_UNKNOWN -1 /* Unknown flag error */ 34#define WDIOF_UNKNOWN -1 /* Unknown flag error */
33#define WDIOS_UNKNOWN -1 /* Unknown status error */ 35#define WDIOS_UNKNOWN -1 /* Unknown status error */
@@ -41,6 +43,7 @@ struct watchdog_info {
41#define WDIOF_POWEROVER 0x0040 /* Power over voltage */ 43#define WDIOF_POWEROVER 0x0040 /* Power over voltage */
42#define WDIOF_SETTIMEOUT 0x0080 /* Set timeout (in seconds) */ 44#define WDIOF_SETTIMEOUT 0x0080 /* Set timeout (in seconds) */
43#define WDIOF_MAGICCLOSE 0x0100 /* Supports magic close char */ 45#define WDIOF_MAGICCLOSE 0x0100 /* Supports magic close char */
46#define WDIOF_PRETIMEOUT 0x0200 /* Pretimeout (in seconds), get/set */
44#define WDIOF_KEEPALIVEPING 0x8000 /* Keep alive ping reply */ 47#define WDIOF_KEEPALIVEPING 0x8000 /* Keep alive ping reply */
45 48
46#define WDIOS_DISABLECARD 0x0001 /* Turn off the watchdog timer */ 49#define WDIOS_DISABLECARD 0x0001 /* Turn off the watchdog timer */