Commit ddca03c9 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Thomas Gleixner

x86: nmi - unify die_nmi() interface

By slightly changing 32bit mode die_nmi() we may unify the
interface and make it common for both (32/64bit) modes
Signed-off-by: default avatarCyrill Gorcunov <gorcunov@gmail.com>
Cc: hpa@zytor.com
Cc: mingo@redhat.com
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 2e4db9d2
...@@ -320,8 +320,6 @@ void touch_nmi_watchdog(void) ...@@ -320,8 +320,6 @@ void touch_nmi_watchdog(void)
} }
EXPORT_SYMBOL(touch_nmi_watchdog); EXPORT_SYMBOL(touch_nmi_watchdog);
extern void die_nmi(struct pt_regs *, const char *msg);
notrace __kprobes int notrace __kprobes int
nmi_watchdog_tick(struct pt_regs *regs, unsigned reason) nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
{ {
...@@ -375,7 +373,8 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason) ...@@ -375,7 +373,8 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
/* /*
* die_nmi will return ONLY if NOTIFY_STOP happens.. * die_nmi will return ONLY if NOTIFY_STOP happens..
*/ */
die_nmi(regs, "BUG: NMI Watchdog detected LOCKUP"); die_nmi("BUG: NMI Watchdog detected LOCKUP",
regs, 0);
} else { } else {
__get_cpu_var(last_irq_sum) = sum; __get_cpu_var(last_irq_sum) = sum;
local_set(&__get_cpu_var(alert_counter), 0); local_set(&__get_cpu_var(alert_counter), 0);
...@@ -406,7 +405,7 @@ static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu) ...@@ -406,7 +405,7 @@ static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu)
char buf[64]; char buf[64];
sprintf(buf, "NMI received for unknown reason %02x\n", reason); sprintf(buf, "NMI received for unknown reason %02x\n", reason);
die_nmi(regs, buf); die_nmi(buf, regs, 0);
return 0; return 0;
} }
......
...@@ -755,9 +755,9 @@ unknown_nmi_error(unsigned char reason, struct pt_regs *regs) ...@@ -755,9 +755,9 @@ unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
static DEFINE_SPINLOCK(nmi_print_lock); static DEFINE_SPINLOCK(nmi_print_lock);
void notrace __kprobes die_nmi(struct pt_regs *regs, const char *msg) void notrace __kprobes die_nmi(char *str, struct pt_regs *regs, int do_panic)
{ {
if (notify_die(DIE_NMIWATCHDOG, msg, regs, 0, 2, SIGINT) == NOTIFY_STOP) if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP)
return; return;
spin_lock(&nmi_print_lock); spin_lock(&nmi_print_lock);
...@@ -766,10 +766,12 @@ void notrace __kprobes die_nmi(struct pt_regs *regs, const char *msg) ...@@ -766,10 +766,12 @@ void notrace __kprobes die_nmi(struct pt_regs *regs, const char *msg)
* to get a message out: * to get a message out:
*/ */
bust_spinlocks(1); bust_spinlocks(1);
printk(KERN_EMERG "%s", msg); printk(KERN_EMERG "%s", str);
printk(" on CPU%d, ip %08lx, registers:\n", printk(" on CPU%d, ip %08lx, registers:\n",
smp_processor_id(), regs->ip); smp_processor_id(), regs->ip);
show_registers(regs); show_registers(regs);
if (do_panic)
panic("Non maskable interrupt");
console_silent(); console_silent();
spin_unlock(&nmi_print_lock); spin_unlock(&nmi_print_lock);
bust_spinlocks(0); bust_spinlocks(0);
......
...@@ -38,12 +38,12 @@ static inline void unset_nmi_pm_callback(struct pm_dev *dev) ...@@ -38,12 +38,12 @@ static inline void unset_nmi_pm_callback(struct pm_dev *dev)
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
extern void default_do_nmi(struct pt_regs *); extern void default_do_nmi(struct pt_regs *);
extern void die_nmi(char *str, struct pt_regs *regs, int do_panic);
extern void nmi_watchdog_default(void); extern void nmi_watchdog_default(void);
#else #else
#define nmi_watchdog_default() do {} while (0) #define nmi_watchdog_default() do {} while (0)
#endif #endif
extern void die_nmi(char *str, struct pt_regs *regs, int do_panic);
extern int check_nmi_watchdog(void); extern int check_nmi_watchdog(void);
extern int nmi_watchdog_enabled; extern int nmi_watchdog_enabled;
extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); extern int avail_to_resrv_perfctr_nmi_bit(unsigned int);
......
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