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