Skip to content

Commit

Permalink
sparc64: Fix reset hangs on Niagara systems.
Browse files Browse the repository at this point in the history
Hypervisor versions older than version 1.6.1 cannot handle
leaving the profile counter overflow interrupt chirping
when the system does a soft reset.

So use a reboot notifier to shut off the NMI watchdog.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Mar 29, 2009
1 parent 07d43ba commit ffaba67
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion arch/sparc/kernel/nmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/kprobes.h>
#include <linux/kernel_stat.h>
#include <linux/reboot.h>
#include <linux/slab.h>
#include <linux/kdebug.h>
#include <linux/delay.h>
Expand Down Expand Up @@ -206,13 +207,33 @@ void nmi_adjust_hz(unsigned int new_hz)
}
EXPORT_SYMBOL_GPL(nmi_adjust_hz);

static int nmi_shutdown(struct notifier_block *nb, unsigned long cmd, void *p)
{
on_each_cpu(stop_watchdog, NULL, 1);
return 0;
}

static struct notifier_block nmi_reboot_notifier = {
.notifier_call = nmi_shutdown,
};

int __init nmi_init(void)
{
int err;

nmi_usable = 1;

on_each_cpu(start_watchdog, NULL, 1);

return check_nmi_watchdog();
err = check_nmi_watchdog();
if (!err) {
err = register_reboot_notifier(&nmi_reboot_notifier);
if (err) {
nmi_usable = 0;
on_each_cpu(stop_watchdog, NULL, 1);
}
}
return err;
}

static int __init setup_nmi_watchdog(char *str)
Expand Down

0 comments on commit ffaba67

Please sign in to comment.