Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −4
Original line number Original line Diff line number Diff line
@@ -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;
}
}


+5 −3
Original line number Original line Diff line number Diff line
@@ -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);
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);