Commit 423a5bb4 authored by Corey Minyard's avatar Corey Minyard Committed by Linus Torvalds

ipmi: use locks on watchdog timeout set on reboot

The IPMI watchdog timer clears or extends the timer on reboot/shutdown.
It was using the non-locking routine for setting the watchdog timer, but
this was causing race conditions.  Instead, use the locking version to
avoid the races.  It seems to work fine.
Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f60adf42
...@@ -1167,7 +1167,7 @@ static int wdog_reboot_handler(struct notifier_block *this, ...@@ -1167,7 +1167,7 @@ static int wdog_reboot_handler(struct notifier_block *this,
if (code == SYS_POWER_OFF || code == SYS_HALT) { if (code == SYS_POWER_OFF || code == SYS_HALT) {
/* Disable the WDT if we are shutting down. */ /* Disable the WDT if we are shutting down. */
ipmi_watchdog_state = WDOG_TIMEOUT_NONE; ipmi_watchdog_state = WDOG_TIMEOUT_NONE;
panic_halt_ipmi_set_timeout(); ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB);
} else if (ipmi_watchdog_state != WDOG_TIMEOUT_NONE) { } else if (ipmi_watchdog_state != WDOG_TIMEOUT_NONE) {
/* Set a long timer to let the reboot happens, but /* Set a long timer to let the reboot happens, but
reboot if it hangs, but only if the watchdog reboot if it hangs, but only if the watchdog
...@@ -1175,7 +1175,7 @@ static int wdog_reboot_handler(struct notifier_block *this, ...@@ -1175,7 +1175,7 @@ static int wdog_reboot_handler(struct notifier_block *this,
timeout = 120; timeout = 120;
pretimeout = 0; pretimeout = 0;
ipmi_watchdog_state = WDOG_TIMEOUT_RESET; ipmi_watchdog_state = WDOG_TIMEOUT_RESET;
panic_halt_ipmi_set_timeout(); ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB);
} }
} }
return NOTIFY_OK; return NOTIFY_OK;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment