Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/hch/vfs...
[pandora-kernel.git] / drivers / char / ipmi / ipmi_watchdog.c
1 /*
2  * ipmi_watchdog.c
3  *
4  * A watchdog timer based upon the IPMI interface.
5  *
6  * Author: MontaVista Software, Inc.
7  *         Corey Minyard <minyard@mvista.com>
8  *         source@mvista.com
9  *
10  * Copyright 2002 MontaVista Software Inc.
11  *
12  *  This program is free software; you can redistribute it and/or modify it
13  *  under the terms of the GNU General Public License as published by the
14  *  Free Software Foundation; either version 2 of the License, or (at your
15  *  option) any later version.
16  *
17  *
18  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
19  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
20  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
24  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
26  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
27  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  *
29  *  You should have received a copy of the GNU General Public License along
30  *  with this program; if not, write to the Free Software Foundation, Inc.,
31  *  675 Mass Ave, Cambridge, MA 02139, USA.
32  */
33
34 #include <linux/module.h>
35 #include <linux/moduleparam.h>
36 #include <linux/ipmi.h>
37 #include <linux/ipmi_smi.h>
38 #include <linux/mutex.h>
39 #include <linux/watchdog.h>
40 #include <linux/miscdevice.h>
41 #include <linux/init.h>
42 #include <linux/completion.h>
43 #include <linux/kdebug.h>
44 #include <linux/rwsem.h>
45 #include <linux/errno.h>
46 #include <asm/uaccess.h>
47 #include <linux/notifier.h>
48 #include <linux/nmi.h>
49 #include <linux/reboot.h>
50 #include <linux/wait.h>
51 #include <linux/poll.h>
52 #include <linux/string.h>
53 #include <linux/ctype.h>
54 #include <linux/delay.h>
55 #include <linux/atomic.h>
56
57 #ifdef CONFIG_X86
58 /*
59  * This is ugly, but I've determined that x86 is the only architecture
60  * that can reasonably support the IPMI NMI watchdog timeout at this
61  * time.  If another architecture adds this capability somehow, it
62  * will have to be a somewhat different mechanism and I have no idea
63  * how it will work.  So in the unlikely event that another
64  * architecture supports this, we can figure out a good generic
65  * mechanism for it at that time.
66  */
67 #include <asm/kdebug.h>
68 #include <asm/nmi.h>
69 #define HAVE_DIE_NMI
70 #endif
71
72 #define PFX "IPMI Watchdog: "
73
74 /*
75  * The IPMI command/response information for the watchdog timer.
76  */
77
78 /* values for byte 1 of the set command, byte 2 of the get response. */
79 #define WDOG_DONT_LOG           (1 << 7)
80 #define WDOG_DONT_STOP_ON_SET   (1 << 6)
81 #define WDOG_SET_TIMER_USE(byte, use) \
82         byte = ((byte) & 0xf8) | ((use) & 0x7)
83 #define WDOG_GET_TIMER_USE(byte) ((byte) & 0x7)
84 #define WDOG_TIMER_USE_BIOS_FRB2        1
85 #define WDOG_TIMER_USE_BIOS_POST        2
86 #define WDOG_TIMER_USE_OS_LOAD          3
87 #define WDOG_TIMER_USE_SMS_OS           4
88 #define WDOG_TIMER_USE_OEM              5
89
90 /* values for byte 2 of the set command, byte 3 of the get response. */
91 #define WDOG_SET_PRETIMEOUT_ACT(byte, use) \
92         byte = ((byte) & 0x8f) | (((use) & 0x7) << 4)
93 #define WDOG_GET_PRETIMEOUT_ACT(byte) (((byte) >> 4) & 0x7)
94 #define WDOG_PRETIMEOUT_NONE            0
95 #define WDOG_PRETIMEOUT_SMI             1
96 #define WDOG_PRETIMEOUT_NMI             2
97 #define WDOG_PRETIMEOUT_MSG_INT         3
98
99 /* Operations that can be performed on a pretimout. */
100 #define WDOG_PREOP_NONE         0
101 #define WDOG_PREOP_PANIC        1
102 /* Cause data to be available to read.  Doesn't work in NMI mode. */
103 #define WDOG_PREOP_GIVE_DATA    2
104
105 /* Actions to perform on a full timeout. */
106 #define WDOG_SET_TIMEOUT_ACT(byte, use) \
107         byte = ((byte) & 0xf8) | ((use) & 0x7)
108 #define WDOG_GET_TIMEOUT_ACT(byte) ((byte) & 0x7)
109 #define WDOG_TIMEOUT_NONE               0
110 #define WDOG_TIMEOUT_RESET              1
111 #define WDOG_TIMEOUT_POWER_DOWN         2
112 #define WDOG_TIMEOUT_POWER_CYCLE        3
113
114 /*
115  * Byte 3 of the get command, byte 4 of the get response is the
116  * pre-timeout in seconds.
117  */
118
119 /* Bits for setting byte 4 of the set command, byte 5 of the get response. */
120 #define WDOG_EXPIRE_CLEAR_BIOS_FRB2     (1 << 1)
121 #define WDOG_EXPIRE_CLEAR_BIOS_POST     (1 << 2)
122 #define WDOG_EXPIRE_CLEAR_OS_LOAD       (1 << 3)
123 #define WDOG_EXPIRE_CLEAR_SMS_OS        (1 << 4)
124 #define WDOG_EXPIRE_CLEAR_OEM           (1 << 5)
125
126 /*
127  * Setting/getting the watchdog timer value.  This is for bytes 5 and
128  * 6 (the timeout time) of the set command, and bytes 6 and 7 (the
129  * timeout time) and 8 and 9 (the current countdown value) of the
130  * response.  The timeout value is given in seconds (in the command it
131  * is 100ms intervals).
132  */
133 #define WDOG_SET_TIMEOUT(byte1, byte2, val) \
134         (byte1) = (((val) * 10) & 0xff), (byte2) = (((val) * 10) >> 8)
135 #define WDOG_GET_TIMEOUT(byte1, byte2) \
136         (((byte1) | ((byte2) << 8)) / 10)
137
138 #define IPMI_WDOG_RESET_TIMER           0x22
139 #define IPMI_WDOG_SET_TIMER             0x24
140 #define IPMI_WDOG_GET_TIMER             0x25
141
142 /* These are here until the real ones get into the watchdog.h interface. */
143 #ifndef WDIOC_GETTIMEOUT
144 #define WDIOC_GETTIMEOUT        _IOW(WATCHDOG_IOCTL_BASE, 20, int)
145 #endif
146 #ifndef WDIOC_SET_PRETIMEOUT
147 #define WDIOC_SET_PRETIMEOUT     _IOW(WATCHDOG_IOCTL_BASE, 21, int)
148 #endif
149 #ifndef WDIOC_GET_PRETIMEOUT
150 #define WDIOC_GET_PRETIMEOUT     _IOW(WATCHDOG_IOCTL_BASE, 22, int)
151 #endif
152
153 static DEFINE_MUTEX(ipmi_watchdog_mutex);
154 static int nowayout = WATCHDOG_NOWAYOUT;
155
156 static ipmi_user_t watchdog_user;
157 static int watchdog_ifnum;
158
159 /* Default the timeout to 10 seconds. */
160 static int timeout = 10;
161
162 /* The pre-timeout is disabled by default. */
163 static int pretimeout;
164
165 /* Default action is to reset the board on a timeout. */
166 static unsigned char action_val = WDOG_TIMEOUT_RESET;
167
168 static char action[16] = "reset";
169
170 static unsigned char preaction_val = WDOG_PRETIMEOUT_NONE;
171
172 static char preaction[16] = "pre_none";
173
174 static unsigned char preop_val = WDOG_PREOP_NONE;
175
176 static char preop[16] = "preop_none";
177 static DEFINE_SPINLOCK(ipmi_read_lock);
178 static char data_to_read;
179 static DECLARE_WAIT_QUEUE_HEAD(read_q);
180 static struct fasync_struct *fasync_q;
181 static char pretimeout_since_last_heartbeat;
182 static char expect_close;
183
184 static int ifnum_to_use = -1;
185
186 /* Parameters to ipmi_set_timeout */
187 #define IPMI_SET_TIMEOUT_NO_HB                  0
188 #define IPMI_SET_TIMEOUT_HB_IF_NECESSARY        1
189 #define IPMI_SET_TIMEOUT_FORCE_HB               2
190
191 static int ipmi_set_timeout(int do_heartbeat);
192 static void ipmi_register_watchdog(int ipmi_intf);
193 static void ipmi_unregister_watchdog(int ipmi_intf);
194
195 /*
196  * If true, the driver will start running as soon as it is configured
197  * and ready.
198  */
199 static int start_now;
200
201 static int set_param_timeout(const char *val, const struct kernel_param *kp)
202 {
203         char *endp;
204         int  l;
205         int  rv = 0;
206
207         if (!val)
208                 return -EINVAL;
209         l = simple_strtoul(val, &endp, 0);
210         if (endp == val)
211                 return -EINVAL;
212
213         *((int *)kp->arg) = l;
214         if (watchdog_user)
215                 rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY);
216
217         return rv;
218 }
219
220 static struct kernel_param_ops param_ops_timeout = {
221         .set = set_param_timeout,
222         .get = param_get_int,
223 };
224 #define param_check_timeout param_check_int
225
226 typedef int (*action_fn)(const char *intval, char *outval);
227
228 static int action_op(const char *inval, char *outval);
229 static int preaction_op(const char *inval, char *outval);
230 static int preop_op(const char *inval, char *outval);
231 static void check_parms(void);
232
233 static int set_param_str(const char *val, const struct kernel_param *kp)
234 {
235         action_fn  fn = (action_fn) kp->arg;
236         int        rv = 0;
237         char       valcp[16];
238         char       *s;
239
240         strncpy(valcp, val, 16);
241         valcp[15] = '\0';
242
243         s = strstrip(valcp);
244
245         rv = fn(s, NULL);
246         if (rv)
247                 goto out;
248
249         check_parms();
250         if (watchdog_user)
251                 rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY);
252
253  out:
254         return rv;
255 }
256
257 static int get_param_str(char *buffer, const struct kernel_param *kp)
258 {
259         action_fn fn = (action_fn) kp->arg;
260         int       rv;
261
262         rv = fn(NULL, buffer);
263         if (rv)
264                 return rv;
265         return strlen(buffer);
266 }
267
268
269 static int set_param_wdog_ifnum(const char *val, const struct kernel_param *kp)
270 {
271         int rv = param_set_int(val, kp);
272         if (rv)
273                 return rv;
274         if ((ifnum_to_use < 0) || (ifnum_to_use == watchdog_ifnum))
275                 return 0;
276
277         ipmi_unregister_watchdog(watchdog_ifnum);
278         ipmi_register_watchdog(ifnum_to_use);
279         return 0;
280 }
281
282 static struct kernel_param_ops param_ops_wdog_ifnum = {
283         .set = set_param_wdog_ifnum,
284         .get = param_get_int,
285 };
286
287 #define param_check_wdog_ifnum param_check_int
288
289 static struct kernel_param_ops param_ops_str = {
290         .set = set_param_str,
291         .get = get_param_str,
292 };
293
294 module_param(ifnum_to_use, wdog_ifnum, 0644);
295 MODULE_PARM_DESC(ifnum_to_use, "The interface number to use for the watchdog "
296                  "timer.  Setting to -1 defaults to the first registered "
297                  "interface");
298
299 module_param(timeout, timeout, 0644);
300 MODULE_PARM_DESC(timeout, "Timeout value in seconds.");
301
302 module_param(pretimeout, timeout, 0644);
303 MODULE_PARM_DESC(pretimeout, "Pretimeout value in seconds.");
304
305 module_param_cb(action, &param_ops_str, action_op, 0644);
306 MODULE_PARM_DESC(action, "Timeout action. One of: "
307                  "reset, none, power_cycle, power_off.");
308
309 module_param_cb(preaction, &param_ops_str, preaction_op, 0644);
310 MODULE_PARM_DESC(preaction, "Pretimeout action.  One of: "
311                  "pre_none, pre_smi, pre_nmi, pre_int.");
312
313 module_param_cb(preop, &param_ops_str, preop_op, 0644);
314 MODULE_PARM_DESC(preop, "Pretimeout driver operation.  One of: "
315                  "preop_none, preop_panic, preop_give_data.");
316
317 module_param(start_now, int, 0444);
318 MODULE_PARM_DESC(start_now, "Set to 1 to start the watchdog as"
319                  "soon as the driver is loaded.");
320
321 module_param(nowayout, int, 0644);
322 MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started "
323                  "(default=CONFIG_WATCHDOG_NOWAYOUT)");
324
325 /* Default state of the timer. */
326 static unsigned char ipmi_watchdog_state = WDOG_TIMEOUT_NONE;
327
328 /* If shutting down via IPMI, we ignore the heartbeat. */
329 static int ipmi_ignore_heartbeat;
330
331 /* Is someone using the watchdog?  Only one user is allowed. */
332 static unsigned long ipmi_wdog_open;
333
334 /*
335  * If set to 1, the heartbeat command will set the state to reset and
336  * start the timer.  The timer doesn't normally run when the driver is
337  * first opened until the heartbeat is set the first time, this
338  * variable is used to accomplish this.
339  */
340 static int ipmi_start_timer_on_heartbeat;
341
342 /* IPMI version of the BMC. */
343 static unsigned char ipmi_version_major;
344 static unsigned char ipmi_version_minor;
345
346 /* If a pretimeout occurs, this is used to allow only one panic to happen. */
347 static atomic_t preop_panic_excl = ATOMIC_INIT(-1);
348
349 #ifdef HAVE_DIE_NMI
350 static int testing_nmi;
351 static int nmi_handler_registered;
352 #endif
353
354 static int ipmi_heartbeat(void);
355
356 /*
357  * We use a mutex to make sure that only one thing can send a set
358  * timeout at one time, because we only have one copy of the data.
359  * The mutex is claimed when the set_timeout is sent and freed
360  * when both messages are free.
361  */
362 static atomic_t set_timeout_tofree = ATOMIC_INIT(0);
363 static DEFINE_MUTEX(set_timeout_lock);
364 static DECLARE_COMPLETION(set_timeout_wait);
365 static void set_timeout_free_smi(struct ipmi_smi_msg *msg)
366 {
367     if (atomic_dec_and_test(&set_timeout_tofree))
368             complete(&set_timeout_wait);
369 }
370 static void set_timeout_free_recv(struct ipmi_recv_msg *msg)
371 {
372     if (atomic_dec_and_test(&set_timeout_tofree))
373             complete(&set_timeout_wait);
374 }
375 static struct ipmi_smi_msg set_timeout_smi_msg = {
376         .done = set_timeout_free_smi
377 };
378 static struct ipmi_recv_msg set_timeout_recv_msg = {
379         .done = set_timeout_free_recv
380 };
381
382 static int i_ipmi_set_timeout(struct ipmi_smi_msg  *smi_msg,
383                               struct ipmi_recv_msg *recv_msg,
384                               int                  *send_heartbeat_now)
385 {
386         struct kernel_ipmi_msg            msg;
387         unsigned char                     data[6];
388         int                               rv;
389         struct ipmi_system_interface_addr addr;
390         int                               hbnow = 0;
391
392
393         /* These can be cleared as we are setting the timeout. */
394         pretimeout_since_last_heartbeat = 0;
395
396         data[0] = 0;
397         WDOG_SET_TIMER_USE(data[0], WDOG_TIMER_USE_SMS_OS);
398
399         if ((ipmi_version_major > 1)
400             || ((ipmi_version_major == 1) && (ipmi_version_minor >= 5))) {
401                 /* This is an IPMI 1.5-only feature. */
402                 data[0] |= WDOG_DONT_STOP_ON_SET;
403         } else if (ipmi_watchdog_state != WDOG_TIMEOUT_NONE) {
404                 /*
405                  * In ipmi 1.0, setting the timer stops the watchdog, we
406                  * need to start it back up again.
407                  */
408                 hbnow = 1;
409         }
410
411         data[1] = 0;
412         WDOG_SET_TIMEOUT_ACT(data[1], ipmi_watchdog_state);
413         if ((pretimeout > 0) && (ipmi_watchdog_state != WDOG_TIMEOUT_NONE)) {
414             WDOG_SET_PRETIMEOUT_ACT(data[1], preaction_val);
415             data[2] = pretimeout;
416         } else {
417             WDOG_SET_PRETIMEOUT_ACT(data[1], WDOG_PRETIMEOUT_NONE);
418             data[2] = 0; /* No pretimeout. */
419         }
420         data[3] = 0;
421         WDOG_SET_TIMEOUT(data[4], data[5], timeout);
422
423         addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
424         addr.channel = IPMI_BMC_CHANNEL;
425         addr.lun = 0;
426
427         msg.netfn = 0x06;
428         msg.cmd = IPMI_WDOG_SET_TIMER;
429         msg.data = data;
430         msg.data_len = sizeof(data);
431         rv = ipmi_request_supply_msgs(watchdog_user,
432                                       (struct ipmi_addr *) &addr,
433                                       0,
434                                       &msg,
435                                       NULL,
436                                       smi_msg,
437                                       recv_msg,
438                                       1);
439         if (rv) {
440                 printk(KERN_WARNING PFX "set timeout error: %d\n",
441                        rv);
442         }
443
444         if (send_heartbeat_now)
445             *send_heartbeat_now = hbnow;
446
447         return rv;
448 }
449
450 static int ipmi_set_timeout(int do_heartbeat)
451 {
452         int send_heartbeat_now;
453         int rv;
454
455
456         /* We can only send one of these at a time. */
457         mutex_lock(&set_timeout_lock);
458
459         atomic_set(&set_timeout_tofree, 2);
460
461         rv = i_ipmi_set_timeout(&set_timeout_smi_msg,
462                                 &set_timeout_recv_msg,
463                                 &send_heartbeat_now);
464         if (rv) {
465                 mutex_unlock(&set_timeout_lock);
466                 goto out;
467         }
468
469         wait_for_completion(&set_timeout_wait);
470
471         mutex_unlock(&set_timeout_lock);
472
473         if ((do_heartbeat == IPMI_SET_TIMEOUT_FORCE_HB)
474             || ((send_heartbeat_now)
475                 && (do_heartbeat == IPMI_SET_TIMEOUT_HB_IF_NECESSARY)))
476                 rv = ipmi_heartbeat();
477
478 out:
479         return rv;
480 }
481
482 static atomic_t panic_done_count = ATOMIC_INIT(0);
483
484 static void panic_smi_free(struct ipmi_smi_msg *msg)
485 {
486         atomic_dec(&panic_done_count);
487 }
488 static void panic_recv_free(struct ipmi_recv_msg *msg)
489 {
490         atomic_dec(&panic_done_count);
491 }
492
493 static struct ipmi_smi_msg panic_halt_heartbeat_smi_msg = {
494         .done = panic_smi_free
495 };
496 static struct ipmi_recv_msg panic_halt_heartbeat_recv_msg = {
497         .done = panic_recv_free
498 };
499
500 static void panic_halt_ipmi_heartbeat(void)
501 {
502         struct kernel_ipmi_msg             msg;
503         struct ipmi_system_interface_addr addr;
504         int rv;
505
506         /*
507          * Don't reset the timer if we have the timer turned off, that
508          * re-enables the watchdog.
509          */
510         if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE)
511                 return;
512
513         addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
514         addr.channel = IPMI_BMC_CHANNEL;
515         addr.lun = 0;
516
517         msg.netfn = 0x06;
518         msg.cmd = IPMI_WDOG_RESET_TIMER;
519         msg.data = NULL;
520         msg.data_len = 0;
521         rv = ipmi_request_supply_msgs(watchdog_user,
522                                       (struct ipmi_addr *) &addr,
523                                       0,
524                                       &msg,
525                                       NULL,
526                                       &panic_halt_heartbeat_smi_msg,
527                                       &panic_halt_heartbeat_recv_msg,
528                                       1);
529         if (!rv)
530                 atomic_add(2, &panic_done_count);
531 }
532
533 static struct ipmi_smi_msg panic_halt_smi_msg = {
534         .done = panic_smi_free
535 };
536 static struct ipmi_recv_msg panic_halt_recv_msg = {
537         .done = panic_recv_free
538 };
539
540 /*
541  * Special call, doesn't claim any locks.  This is only to be called
542  * at panic or halt time, in run-to-completion mode, when the caller
543  * is the only CPU and the only thing that will be going is these IPMI
544  * calls.
545  */
546 static void panic_halt_ipmi_set_timeout(void)
547 {
548         int send_heartbeat_now;
549         int rv;
550
551         /* Wait for the messages to be free. */
552         while (atomic_read(&panic_done_count) != 0)
553                 ipmi_poll_interface(watchdog_user);
554         rv = i_ipmi_set_timeout(&panic_halt_smi_msg,
555                                 &panic_halt_recv_msg,
556                                 &send_heartbeat_now);
557         if (!rv) {
558                 atomic_add(2, &panic_done_count);
559                 if (send_heartbeat_now)
560                         panic_halt_ipmi_heartbeat();
561         } else
562                 printk(KERN_WARNING PFX
563                        "Unable to extend the watchdog timeout.");
564         while (atomic_read(&panic_done_count) != 0)
565                 ipmi_poll_interface(watchdog_user);
566 }
567
568 /*
569  * We use a mutex to make sure that only one thing can send a
570  * heartbeat at one time, because we only have one copy of the data.
571  * The semaphore is claimed when the set_timeout is sent and freed
572  * when both messages are free.
573  */
574 static atomic_t heartbeat_tofree = ATOMIC_INIT(0);
575 static DEFINE_MUTEX(heartbeat_lock);
576 static DECLARE_COMPLETION(heartbeat_wait);
577 static void heartbeat_free_smi(struct ipmi_smi_msg *msg)
578 {
579     if (atomic_dec_and_test(&heartbeat_tofree))
580             complete(&heartbeat_wait);
581 }
582 static void heartbeat_free_recv(struct ipmi_recv_msg *msg)
583 {
584     if (atomic_dec_and_test(&heartbeat_tofree))
585             complete(&heartbeat_wait);
586 }
587 static struct ipmi_smi_msg heartbeat_smi_msg = {
588         .done = heartbeat_free_smi
589 };
590 static struct ipmi_recv_msg heartbeat_recv_msg = {
591         .done = heartbeat_free_recv
592 };
593
594 static int ipmi_heartbeat(void)
595 {
596         struct kernel_ipmi_msg            msg;
597         int                               rv;
598         struct ipmi_system_interface_addr addr;
599
600         if (ipmi_ignore_heartbeat)
601                 return 0;
602
603         if (ipmi_start_timer_on_heartbeat) {
604                 ipmi_start_timer_on_heartbeat = 0;
605                 ipmi_watchdog_state = action_val;
606                 return ipmi_set_timeout(IPMI_SET_TIMEOUT_FORCE_HB);
607         } else if (pretimeout_since_last_heartbeat) {
608                 /*
609                  * A pretimeout occurred, make sure we set the timeout.
610                  * We don't want to set the action, though, we want to
611                  * leave that alone (thus it can't be combined with the
612                  * above operation.
613                  */
614                 return ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY);
615         }
616
617         mutex_lock(&heartbeat_lock);
618
619         atomic_set(&heartbeat_tofree, 2);
620
621         /*
622          * Don't reset the timer if we have the timer turned off, that
623          * re-enables the watchdog.
624          */
625         if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE) {
626                 mutex_unlock(&heartbeat_lock);
627                 return 0;
628         }
629
630         addr.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
631         addr.channel = IPMI_BMC_CHANNEL;
632         addr.lun = 0;
633
634         msg.netfn = 0x06;
635         msg.cmd = IPMI_WDOG_RESET_TIMER;
636         msg.data = NULL;
637         msg.data_len = 0;
638         rv = ipmi_request_supply_msgs(watchdog_user,
639                                       (struct ipmi_addr *) &addr,
640                                       0,
641                                       &msg,
642                                       NULL,
643                                       &heartbeat_smi_msg,
644                                       &heartbeat_recv_msg,
645                                       1);
646         if (rv) {
647                 mutex_unlock(&heartbeat_lock);
648                 printk(KERN_WARNING PFX "heartbeat failure: %d\n",
649                        rv);
650                 return rv;
651         }
652
653         /* Wait for the heartbeat to be sent. */
654         wait_for_completion(&heartbeat_wait);
655
656         if (heartbeat_recv_msg.msg.data[0] != 0) {
657                 /*
658                  * Got an error in the heartbeat response.  It was already
659                  * reported in ipmi_wdog_msg_handler, but we should return
660                  * an error here.
661                  */
662                 rv = -EINVAL;
663         }
664
665         mutex_unlock(&heartbeat_lock);
666
667         return rv;
668 }
669
670 static struct watchdog_info ident = {
671         .options        = 0,    /* WDIOF_SETTIMEOUT, */
672         .firmware_version = 1,
673         .identity       = "IPMI"
674 };
675
676 static int ipmi_ioctl(struct file *file,
677                       unsigned int cmd, unsigned long arg)
678 {
679         void __user *argp = (void __user *)arg;
680         int i;
681         int val;
682
683         switch (cmd) {
684         case WDIOC_GETSUPPORT:
685                 i = copy_to_user(argp, &ident, sizeof(ident));
686                 return i ? -EFAULT : 0;
687
688         case WDIOC_SETTIMEOUT:
689                 i = copy_from_user(&val, argp, sizeof(int));
690                 if (i)
691                         return -EFAULT;
692                 timeout = val;
693                 return ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY);
694
695         case WDIOC_GETTIMEOUT:
696                 i = copy_to_user(argp, &timeout, sizeof(timeout));
697                 if (i)
698                         return -EFAULT;
699                 return 0;
700
701         case WDIOC_SET_PRETIMEOUT:
702         case WDIOC_SETPRETIMEOUT:
703                 i = copy_from_user(&val, argp, sizeof(int));
704                 if (i)
705                         return -EFAULT;
706                 pretimeout = val;
707                 return ipmi_set_timeout(IPMI_SET_TIMEOUT_HB_IF_NECESSARY);
708
709         case WDIOC_GET_PRETIMEOUT:
710         case WDIOC_GETPRETIMEOUT:
711                 i = copy_to_user(argp, &pretimeout, sizeof(pretimeout));
712                 if (i)
713                         return -EFAULT;
714                 return 0;
715
716         case WDIOC_KEEPALIVE:
717                 return ipmi_heartbeat();
718
719         case WDIOC_SETOPTIONS:
720                 i = copy_from_user(&val, argp, sizeof(int));
721                 if (i)
722                         return -EFAULT;
723                 if (val & WDIOS_DISABLECARD) {
724                         ipmi_watchdog_state = WDOG_TIMEOUT_NONE;
725                         ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB);
726                         ipmi_start_timer_on_heartbeat = 0;
727                 }
728
729                 if (val & WDIOS_ENABLECARD) {
730                         ipmi_watchdog_state = action_val;
731                         ipmi_set_timeout(IPMI_SET_TIMEOUT_FORCE_HB);
732                 }
733                 return 0;
734
735         case WDIOC_GETSTATUS:
736                 val = 0;
737                 i = copy_to_user(argp, &val, sizeof(val));
738                 if (i)
739                         return -EFAULT;
740                 return 0;
741
742         default:
743                 return -ENOIOCTLCMD;
744         }
745 }
746
747 static long ipmi_unlocked_ioctl(struct file *file,
748                                 unsigned int cmd,
749                                 unsigned long arg)
750 {
751         int ret;
752
753         mutex_lock(&ipmi_watchdog_mutex);
754         ret = ipmi_ioctl(file, cmd, arg);
755         mutex_unlock(&ipmi_watchdog_mutex);
756
757         return ret;
758 }
759
760 static ssize_t ipmi_write(struct file *file,
761                           const char  __user *buf,
762                           size_t      len,
763                           loff_t      *ppos)
764 {
765         int rv;
766
767         if (len) {
768                 if (!nowayout) {
769                         size_t i;
770
771                         /* In case it was set long ago */
772                         expect_close = 0;
773
774                         for (i = 0; i != len; i++) {
775                                 char c;
776
777                                 if (get_user(c, buf + i))
778                                         return -EFAULT;
779                                 if (c == 'V')
780                                         expect_close = 42;
781                         }
782                 }
783                 rv = ipmi_heartbeat();
784                 if (rv)
785                         return rv;
786         }
787         return len;
788 }
789
790 static ssize_t ipmi_read(struct file *file,
791                          char        __user *buf,
792                          size_t      count,
793                          loff_t      *ppos)
794 {
795         int          rv = 0;
796         wait_queue_t wait;
797
798         if (count <= 0)
799                 return 0;
800
801         /*
802          * Reading returns if the pretimeout has gone off, and it only does
803          * it once per pretimeout.
804          */
805         spin_lock(&ipmi_read_lock);
806         if (!data_to_read) {
807                 if (file->f_flags & O_NONBLOCK) {
808                         rv = -EAGAIN;
809                         goto out;
810                 }
811
812                 init_waitqueue_entry(&wait, current);
813                 add_wait_queue(&read_q, &wait);
814                 while (!data_to_read) {
815                         set_current_state(TASK_INTERRUPTIBLE);
816                         spin_unlock(&ipmi_read_lock);
817                         schedule();
818                         spin_lock(&ipmi_read_lock);
819                 }
820                 remove_wait_queue(&read_q, &wait);
821
822                 if (signal_pending(current)) {
823                         rv = -ERESTARTSYS;
824                         goto out;
825                 }
826         }
827         data_to_read = 0;
828
829  out:
830         spin_unlock(&ipmi_read_lock);
831
832         if (rv == 0) {
833                 if (copy_to_user(buf, &data_to_read, 1))
834                         rv = -EFAULT;
835                 else
836                         rv = 1;
837         }
838
839         return rv;
840 }
841
842 static int ipmi_open(struct inode *ino, struct file *filep)
843 {
844         switch (iminor(ino)) {
845         case WATCHDOG_MINOR:
846                 if (test_and_set_bit(0, &ipmi_wdog_open))
847                         return -EBUSY;
848
849
850                 /*
851                  * Don't start the timer now, let it start on the
852                  * first heartbeat.
853                  */
854                 ipmi_start_timer_on_heartbeat = 1;
855                 return nonseekable_open(ino, filep);
856
857         default:
858                 return (-ENODEV);
859         }
860 }
861
862 static unsigned int ipmi_poll(struct file *file, poll_table *wait)
863 {
864         unsigned int mask = 0;
865
866         poll_wait(file, &read_q, wait);
867
868         spin_lock(&ipmi_read_lock);
869         if (data_to_read)
870                 mask |= (POLLIN | POLLRDNORM);
871         spin_unlock(&ipmi_read_lock);
872
873         return mask;
874 }
875
876 static int ipmi_fasync(int fd, struct file *file, int on)
877 {
878         int result;
879
880         result = fasync_helper(fd, file, on, &fasync_q);
881
882         return (result);
883 }
884
885 static int ipmi_close(struct inode *ino, struct file *filep)
886 {
887         if (iminor(ino) == WATCHDOG_MINOR) {
888                 if (expect_close == 42) {
889                         ipmi_watchdog_state = WDOG_TIMEOUT_NONE;
890                         ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB);
891                 } else {
892                         printk(KERN_CRIT PFX
893                                "Unexpected close, not stopping watchdog!\n");
894                         ipmi_heartbeat();
895                 }
896                 clear_bit(0, &ipmi_wdog_open);
897         }
898
899         expect_close = 0;
900
901         return 0;
902 }
903
904 static const struct file_operations ipmi_wdog_fops = {
905         .owner   = THIS_MODULE,
906         .read    = ipmi_read,
907         .poll    = ipmi_poll,
908         .write   = ipmi_write,
909         .unlocked_ioctl = ipmi_unlocked_ioctl,
910         .open    = ipmi_open,
911         .release = ipmi_close,
912         .fasync  = ipmi_fasync,
913         .llseek  = no_llseek,
914 };
915
916 static struct miscdevice ipmi_wdog_miscdev = {
917         .minor          = WATCHDOG_MINOR,
918         .name           = "watchdog",
919         .fops           = &ipmi_wdog_fops
920 };
921
922 static void ipmi_wdog_msg_handler(struct ipmi_recv_msg *msg,
923                                   void                 *handler_data)
924 {
925         if (msg->msg.data[0] != 0) {
926                 printk(KERN_ERR PFX "response: Error %x on cmd %x\n",
927                        msg->msg.data[0],
928                        msg->msg.cmd);
929         }
930
931         ipmi_free_recv_msg(msg);
932 }
933
934 static void ipmi_wdog_pretimeout_handler(void *handler_data)
935 {
936         if (preaction_val != WDOG_PRETIMEOUT_NONE) {
937                 if (preop_val == WDOG_PREOP_PANIC) {
938                         if (atomic_inc_and_test(&preop_panic_excl))
939                                 panic("Watchdog pre-timeout");
940                 } else if (preop_val == WDOG_PREOP_GIVE_DATA) {
941                         spin_lock(&ipmi_read_lock);
942                         data_to_read = 1;
943                         wake_up_interruptible(&read_q);
944                         kill_fasync(&fasync_q, SIGIO, POLL_IN);
945
946                         spin_unlock(&ipmi_read_lock);
947                 }
948         }
949
950         /*
951          * On some machines, the heartbeat will give an error and not
952          * work unless we re-enable the timer.  So do so.
953          */
954         pretimeout_since_last_heartbeat = 1;
955 }
956
957 static struct ipmi_user_hndl ipmi_hndlrs = {
958         .ipmi_recv_hndl           = ipmi_wdog_msg_handler,
959         .ipmi_watchdog_pretimeout = ipmi_wdog_pretimeout_handler
960 };
961
962 static void ipmi_register_watchdog(int ipmi_intf)
963 {
964         int rv = -EBUSY;
965
966         if (watchdog_user)
967                 goto out;
968
969         if ((ifnum_to_use >= 0) && (ifnum_to_use != ipmi_intf))
970                 goto out;
971
972         watchdog_ifnum = ipmi_intf;
973
974         rv = ipmi_create_user(ipmi_intf, &ipmi_hndlrs, NULL, &watchdog_user);
975         if (rv < 0) {
976                 printk(KERN_CRIT PFX "Unable to register with ipmi\n");
977                 goto out;
978         }
979
980         ipmi_get_version(watchdog_user,
981                          &ipmi_version_major,
982                          &ipmi_version_minor);
983
984         rv = misc_register(&ipmi_wdog_miscdev);
985         if (rv < 0) {
986                 ipmi_destroy_user(watchdog_user);
987                 watchdog_user = NULL;
988                 printk(KERN_CRIT PFX "Unable to register misc device\n");
989         }
990
991 #ifdef HAVE_DIE_NMI
992         if (nmi_handler_registered) {
993                 int old_pretimeout = pretimeout;
994                 int old_timeout = timeout;
995                 int old_preop_val = preop_val;
996
997                 /*
998                  * Set the pretimeout to go off in a second and give
999                  * ourselves plenty of time to stop the timer.
1000                  */
1001                 ipmi_watchdog_state = WDOG_TIMEOUT_RESET;
1002                 preop_val = WDOG_PREOP_NONE; /* Make sure nothing happens */
1003                 pretimeout = 99;
1004                 timeout = 100;
1005
1006                 testing_nmi = 1;
1007
1008                 rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_FORCE_HB);
1009                 if (rv) {
1010                         printk(KERN_WARNING PFX "Error starting timer to"
1011                                " test NMI: 0x%x.  The NMI pretimeout will"
1012                                " likely not work\n", rv);
1013                         rv = 0;
1014                         goto out_restore;
1015                 }
1016
1017                 msleep(1500);
1018
1019                 if (testing_nmi != 2) {
1020                         printk(KERN_WARNING PFX "IPMI NMI didn't seem to"
1021                                " occur.  The NMI pretimeout will"
1022                                " likely not work\n");
1023                 }
1024  out_restore:
1025                 testing_nmi = 0;
1026                 preop_val = old_preop_val;
1027                 pretimeout = old_pretimeout;
1028                 timeout = old_timeout;
1029         }
1030 #endif
1031
1032  out:
1033         if ((start_now) && (rv == 0)) {
1034                 /* Run from startup, so start the timer now. */
1035                 start_now = 0; /* Disable this function after first startup. */
1036                 ipmi_watchdog_state = action_val;
1037                 ipmi_set_timeout(IPMI_SET_TIMEOUT_FORCE_HB);
1038                 printk(KERN_INFO PFX "Starting now!\n");
1039         } else {
1040                 /* Stop the timer now. */
1041                 ipmi_watchdog_state = WDOG_TIMEOUT_NONE;
1042                 ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB);
1043         }
1044 }
1045
1046 static void ipmi_unregister_watchdog(int ipmi_intf)
1047 {
1048         int rv;
1049
1050         if (!watchdog_user)
1051                 goto out;
1052
1053         if (watchdog_ifnum != ipmi_intf)
1054                 goto out;
1055
1056         /* Make sure no one can call us any more. */
1057         misc_deregister(&ipmi_wdog_miscdev);
1058
1059         /*
1060          * Wait to make sure the message makes it out.  The lower layer has
1061          * pointers to our buffers, we want to make sure they are done before
1062          * we release our memory.
1063          */
1064         while (atomic_read(&set_timeout_tofree))
1065                 schedule_timeout_uninterruptible(1);
1066
1067         /* Disconnect from IPMI. */
1068         rv = ipmi_destroy_user(watchdog_user);
1069         if (rv) {
1070                 printk(KERN_WARNING PFX "error unlinking from IPMI: %d\n",
1071                        rv);
1072         }
1073         watchdog_user = NULL;
1074
1075  out:
1076         return;
1077 }
1078
1079 #ifdef HAVE_DIE_NMI
1080 static int
1081 ipmi_nmi(unsigned int val, struct pt_regs *regs)
1082 {
1083         /*
1084          * If we get here, it's an NMI that's not a memory or I/O
1085          * error.  We can't truly tell if it's from IPMI or not
1086          * without sending a message, and sending a message is almost
1087          * impossible because of locking.
1088          */
1089
1090         if (testing_nmi) {
1091                 testing_nmi = 2;
1092                 return NMI_HANDLED;
1093         }
1094
1095         /* If we are not expecting a timeout, ignore it. */
1096         if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE)
1097                 return NMI_DONE;
1098
1099         if (preaction_val != WDOG_PRETIMEOUT_NMI)
1100                 return NMI_DONE;
1101
1102         /*
1103          * If no one else handled the NMI, we assume it was the IPMI
1104          * watchdog.
1105          */
1106         if (preop_val == WDOG_PREOP_PANIC) {
1107                 /* On some machines, the heartbeat will give
1108                    an error and not work unless we re-enable
1109                    the timer.   So do so. */
1110                 pretimeout_since_last_heartbeat = 1;
1111                 if (atomic_inc_and_test(&preop_panic_excl))
1112                         panic(PFX "pre-timeout");
1113         }
1114
1115         return NMI_HANDLED;
1116 }
1117 #endif
1118
1119 static int wdog_reboot_handler(struct notifier_block *this,
1120                                unsigned long         code,
1121                                void                  *unused)
1122 {
1123         static int reboot_event_handled;
1124
1125         if ((watchdog_user) && (!reboot_event_handled)) {
1126                 /* Make sure we only do this once. */
1127                 reboot_event_handled = 1;
1128
1129                 if (code == SYS_POWER_OFF || code == SYS_HALT) {
1130                         /* Disable the WDT if we are shutting down. */
1131                         ipmi_watchdog_state = WDOG_TIMEOUT_NONE;
1132                         panic_halt_ipmi_set_timeout();
1133                 } else if (ipmi_watchdog_state != WDOG_TIMEOUT_NONE) {
1134                         /* Set a long timer to let the reboot happens, but
1135                            reboot if it hangs, but only if the watchdog
1136                            timer was already running. */
1137                         timeout = 120;
1138                         pretimeout = 0;
1139                         ipmi_watchdog_state = WDOG_TIMEOUT_RESET;
1140                         panic_halt_ipmi_set_timeout();
1141                 }
1142         }
1143         return NOTIFY_OK;
1144 }
1145
1146 static struct notifier_block wdog_reboot_notifier = {
1147         .notifier_call  = wdog_reboot_handler,
1148         .next           = NULL,
1149         .priority       = 0
1150 };
1151
1152 static int wdog_panic_handler(struct notifier_block *this,
1153                               unsigned long         event,
1154                               void                  *unused)
1155 {
1156         static int panic_event_handled;
1157
1158         /* On a panic, if we have a panic timeout, make sure to extend
1159            the watchdog timer to a reasonable value to complete the
1160            panic, if the watchdog timer is running.  Plus the
1161            pretimeout is meaningless at panic time. */
1162         if (watchdog_user && !panic_event_handled &&
1163             ipmi_watchdog_state != WDOG_TIMEOUT_NONE) {
1164                 /* Make sure we do this only once. */
1165                 panic_event_handled = 1;
1166
1167                 timeout = 255;
1168                 pretimeout = 0;
1169                 panic_halt_ipmi_set_timeout();
1170         }
1171
1172         return NOTIFY_OK;
1173 }
1174
1175 static struct notifier_block wdog_panic_notifier = {
1176         .notifier_call  = wdog_panic_handler,
1177         .next           = NULL,
1178         .priority       = 150   /* priority: INT_MAX >= x >= 0 */
1179 };
1180
1181
1182 static void ipmi_new_smi(int if_num, struct device *device)
1183 {
1184         ipmi_register_watchdog(if_num);
1185 }
1186
1187 static void ipmi_smi_gone(int if_num)
1188 {
1189         ipmi_unregister_watchdog(if_num);
1190 }
1191
1192 static struct ipmi_smi_watcher smi_watcher = {
1193         .owner    = THIS_MODULE,
1194         .new_smi  = ipmi_new_smi,
1195         .smi_gone = ipmi_smi_gone
1196 };
1197
1198 static int action_op(const char *inval, char *outval)
1199 {
1200         if (outval)
1201                 strcpy(outval, action);
1202
1203         if (!inval)
1204                 return 0;
1205
1206         if (strcmp(inval, "reset") == 0)
1207                 action_val = WDOG_TIMEOUT_RESET;
1208         else if (strcmp(inval, "none") == 0)
1209                 action_val = WDOG_TIMEOUT_NONE;
1210         else if (strcmp(inval, "power_cycle") == 0)
1211                 action_val = WDOG_TIMEOUT_POWER_CYCLE;
1212         else if (strcmp(inval, "power_off") == 0)
1213                 action_val = WDOG_TIMEOUT_POWER_DOWN;
1214         else
1215                 return -EINVAL;
1216         strcpy(action, inval);
1217         return 0;
1218 }
1219
1220 static int preaction_op(const char *inval, char *outval)
1221 {
1222         if (outval)
1223                 strcpy(outval, preaction);
1224
1225         if (!inval)
1226                 return 0;
1227
1228         if (strcmp(inval, "pre_none") == 0)
1229                 preaction_val = WDOG_PRETIMEOUT_NONE;
1230         else if (strcmp(inval, "pre_smi") == 0)
1231                 preaction_val = WDOG_PRETIMEOUT_SMI;
1232 #ifdef HAVE_DIE_NMI
1233         else if (strcmp(inval, "pre_nmi") == 0)
1234                 preaction_val = WDOG_PRETIMEOUT_NMI;
1235 #endif
1236         else if (strcmp(inval, "pre_int") == 0)
1237                 preaction_val = WDOG_PRETIMEOUT_MSG_INT;
1238         else
1239                 return -EINVAL;
1240         strcpy(preaction, inval);
1241         return 0;
1242 }
1243
1244 static int preop_op(const char *inval, char *outval)
1245 {
1246         if (outval)
1247                 strcpy(outval, preop);
1248
1249         if (!inval)
1250                 return 0;
1251
1252         if (strcmp(inval, "preop_none") == 0)
1253                 preop_val = WDOG_PREOP_NONE;
1254         else if (strcmp(inval, "preop_panic") == 0)
1255                 preop_val = WDOG_PREOP_PANIC;
1256         else if (strcmp(inval, "preop_give_data") == 0)
1257                 preop_val = WDOG_PREOP_GIVE_DATA;
1258         else
1259                 return -EINVAL;
1260         strcpy(preop, inval);
1261         return 0;
1262 }
1263
1264 static void check_parms(void)
1265 {
1266 #ifdef HAVE_DIE_NMI
1267         int do_nmi = 0;
1268         int rv;
1269
1270         if (preaction_val == WDOG_PRETIMEOUT_NMI) {
1271                 do_nmi = 1;
1272                 if (preop_val == WDOG_PREOP_GIVE_DATA) {
1273                         printk(KERN_WARNING PFX "Pretimeout op is to give data"
1274                                " but NMI pretimeout is enabled, setting"
1275                                " pretimeout op to none\n");
1276                         preop_op("preop_none", NULL);
1277                         do_nmi = 0;
1278                 }
1279         }
1280         if (do_nmi && !nmi_handler_registered) {
1281                 rv = register_nmi_handler(NMI_UNKNOWN, ipmi_nmi, 0,
1282                                                 "ipmi");
1283                 if (rv) {
1284                         printk(KERN_WARNING PFX
1285                                "Can't register nmi handler\n");
1286                         return;
1287                 } else
1288                         nmi_handler_registered = 1;
1289         } else if (!do_nmi && nmi_handler_registered) {
1290                 unregister_nmi_handler(NMI_UNKNOWN, "ipmi");
1291                 nmi_handler_registered = 0;
1292         }
1293 #endif
1294 }
1295
1296 static int __init ipmi_wdog_init(void)
1297 {
1298         int rv;
1299
1300         if (action_op(action, NULL)) {
1301                 action_op("reset", NULL);
1302                 printk(KERN_INFO PFX "Unknown action '%s', defaulting to"
1303                        " reset\n", action);
1304         }
1305
1306         if (preaction_op(preaction, NULL)) {
1307                 preaction_op("pre_none", NULL);
1308                 printk(KERN_INFO PFX "Unknown preaction '%s', defaulting to"
1309                        " none\n", preaction);
1310         }
1311
1312         if (preop_op(preop, NULL)) {
1313                 preop_op("preop_none", NULL);
1314                 printk(KERN_INFO PFX "Unknown preop '%s', defaulting to"
1315                        " none\n", preop);
1316         }
1317
1318         check_parms();
1319
1320         register_reboot_notifier(&wdog_reboot_notifier);
1321         atomic_notifier_chain_register(&panic_notifier_list,
1322                         &wdog_panic_notifier);
1323
1324         rv = ipmi_smi_watcher_register(&smi_watcher);
1325         if (rv) {
1326 #ifdef HAVE_DIE_NMI
1327                 if (nmi_handler_registered)
1328                         unregister_nmi_handler(NMI_UNKNOWN, "ipmi");
1329 #endif
1330                 atomic_notifier_chain_unregister(&panic_notifier_list,
1331                                                  &wdog_panic_notifier);
1332                 unregister_reboot_notifier(&wdog_reboot_notifier);
1333                 printk(KERN_WARNING PFX "can't register smi watcher\n");
1334                 return rv;
1335         }
1336
1337         printk(KERN_INFO PFX "driver initialized\n");
1338
1339         return 0;
1340 }
1341
1342 static void __exit ipmi_wdog_exit(void)
1343 {
1344         ipmi_smi_watcher_unregister(&smi_watcher);
1345         ipmi_unregister_watchdog(watchdog_ifnum);
1346
1347 #ifdef HAVE_DIE_NMI
1348         if (nmi_handler_registered)
1349                 unregister_nmi_handler(NMI_UNKNOWN, "ipmi");
1350 #endif
1351
1352         atomic_notifier_chain_unregister(&panic_notifier_list,
1353                                          &wdog_panic_notifier);
1354         unregister_reboot_notifier(&wdog_reboot_notifier);
1355 }
1356 module_exit(ipmi_wdog_exit);
1357 module_init(ipmi_wdog_init);
1358 MODULE_LICENSE("GPL");
1359 MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
1360 MODULE_DESCRIPTION("watchdog timer based upon the IPMI interface.");