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 | /* |