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: Cyrill Gorcunov <gorcunov@gmail.com> Cc: hpa@zytor.com Cc: mingo@redhat.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
committed by
Thomas Gleixner
parent
2e4db9d2c5
commit
ddca03c98a
@@ -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)
|
|||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
* 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)
|
|||||||
|
|
||||||
#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);
|
||||||
|
Reference in New Issue
Block a user