diff options
| -rw-r--r-- | drivers/watchdog/hpwdt.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index 2bc1f74433ce..2686f3eaeedf 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
| @@ -418,20 +418,23 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason, | |||
| 418 | static unsigned long rom_pl; | 418 | static unsigned long rom_pl; |
| 419 | static int die_nmi_called; | 419 | static int die_nmi_called; |
| 420 | 420 | ||
| 421 | if (ulReason == DIE_NMI || ulReason == DIE_NMI_IPI) { | 421 | if (ulReason != DIE_NMI && ulReason != DIE_NMI_IPI) |
| 422 | spin_lock_irqsave(&rom_lock, rom_pl); | 422 | return NOTIFY_OK; |
| 423 | if (!die_nmi_called) | 423 | |
| 424 | asminline_call(&cmn_regs, cru_rom_addr); | 424 | spin_lock_irqsave(&rom_lock, rom_pl); |
| 425 | die_nmi_called = 1; | 425 | if (!die_nmi_called) |
| 426 | spin_unlock_irqrestore(&rom_lock, rom_pl); | 426 | asminline_call(&cmn_regs, cru_rom_addr); |
| 427 | if (cmn_regs.u1.ral != 0) { | 427 | die_nmi_called = 1; |
| 428 | panic("An NMI occurred, please see the Integrated " | 428 | spin_unlock_irqrestore(&rom_lock, rom_pl); |
| 429 | "Management Log for details.\n"); | 429 | if (cmn_regs.u1.ral == 0) { |
| 430 | } | 430 | printk(KERN_WARNING "hpwdt: An NMI occurred, " |
| 431 | "but unable to determine source.\n"); | ||
| 432 | } else { | ||
| 433 | panic("An NMI occurred, please see the Integrated " | ||
| 434 | "Management Log for details.\n"); | ||
| 431 | } | 435 | } |
| 432 | 436 | ||
| 433 | die_nmi_called = 0; | 437 | return NOTIFY_STOP; |
| 434 | return NOTIFY_DONE; | ||
| 435 | } | 438 | } |
| 436 | 439 | ||
| 437 | /* | 440 | /* |
