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

Commit 5dc30558 authored by Don Zickus's avatar Don Zickus Committed by Ingo Molnar
Browse files

x86, NMI: Add back unknown_nmi_panic and nmi_watchdog sysctls



Originally adapted from Huang Ying's patch which moved the
unknown_nmi_panic to the traps.c file.  Because the old nmi
watchdog was deleted before this change happened, the
unknown_nmi_panic sysctl was lost.  This re-adds it.

Also, the nmi_watchdog sysctl was re-implemented and its
documentation updated accordingly.

Patch-inspired-by: default avatarHuang Ying <ying.huang@intel.com>
Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
Reviewed-by: default avatarCyrill Gorcunov <gorcunov@gmail.com>
Acked-by: default avatarYinghai Lu <yinghai@kernel.org>
Cc: fweisbec@gmail.com
LKML-Reference: <1291068437-5331-3-git-send-email-dzickus@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 96a84c20
Loading
Loading
Loading
Loading
+1 −9
Original line number Diff line number Diff line
@@ -1579,20 +1579,12 @@ and is between 256 and 4096 characters. It is defined in the file

	nmi_watchdog=	[KNL,BUGS=X86] Debugging features for SMP kernels
			Format: [panic,][num]
			Valid num: 0,1,2
			Valid num: 0
			0 - turn nmi_watchdog off
			1 - use the IO-APIC timer for the NMI watchdog
			2 - use the local APIC for the NMI watchdog using
			a performance counter. Note: This will use one
			performance counter and the local APIC's performance
			vector.
			When panic is specified, panic when an NMI watchdog
			timeout occurs.
			This is useful when you use a panic=... timeout and
			need the box quickly up again.
			Instead of 1 and 2 it is possible to use the following
			symbolic names: lapic and ioapic
			Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic

	netpoll.carrier_timeout=
			[NET] Specifies amount of time (in seconds) that
+0 −3
Original line number Diff line number Diff line
@@ -99,6 +99,3 @@ static int __init register_trigger_all_cpu_backtrace(void)
}
early_initcall(register_trigger_all_cpu_backtrace);
#endif

/* STUB calls to mimic old nmi_watchdog behaviour */
int unknown_nmi_panic;
+11 −5
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ EXPORT_SYMBOL_GPL(used_vectors);

static int ignore_nmis;

int unknown_nmi_panic;

static inline void conditional_sti(struct pt_regs *regs)
{
	if (regs->flags & X86_EFLAGS_IF)
@@ -300,6 +302,13 @@ do_general_protection(struct pt_regs *regs, long error_code)
	die("general protection fault", regs, error_code);
}

static int __init setup_unknown_nmi_panic(char *str)
{
	unknown_nmi_panic = 1;
	return 1;
}
__setup("unknown_nmi_panic", setup_unknown_nmi_panic);

static notrace __kprobes void
mem_parity_error(unsigned char reason, struct pt_regs *regs)
{
@@ -371,7 +380,7 @@ unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
			reason, smp_processor_id());

	printk(KERN_EMERG "Do you have a strange power saving mode enabled?\n");
	if (panic_on_unrecovered_nmi)
	if (unknown_nmi_panic || panic_on_unrecovered_nmi)
		panic("NMI: Not continuing");

	printk(KERN_EMERG "Dazed and confused, but trying to continue\n");
@@ -397,11 +406,8 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
		if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT)
							== NOTIFY_STOP)
			return;

			unknown_nmi_error(reason, regs);
#else
		unknown_nmi_error(reason, regs);
#endif
		unknown_nmi_error(reason, regs);

		return;
	}
+16 −0
Original line number Diff line number Diff line
@@ -745,6 +745,22 @@ static struct ctl_table kern_table[] = {
		.extra1		= &zero,
		.extra2		= &one,
	},
	{
		.procname       = "nmi_watchdog",
		.data           = &watchdog_enabled,
		.maxlen         = sizeof (int),
		.mode           = 0644,
		.proc_handler   = proc_dowatchdog_enabled,
	},
#endif
#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86)
	{
		.procname       = "unknown_nmi_panic",
		.data           = &unknown_nmi_panic,
		.maxlen         = sizeof (int),
		.mode           = 0644,
		.proc_handler   = proc_dointvec,
	},
#endif
#if defined(CONFIG_X86)
	{
+0 −1
Original line number Diff line number Diff line
@@ -136,7 +136,6 @@ static const struct bin_table bin_kern_table[] = {
	{ CTL_INT,	KERN_IA64_UNALIGNED,		"ignore-unaligned-usertrap" },
	{ CTL_INT,	KERN_COMPAT_LOG,		"compat-log" },
	{ CTL_INT,	KERN_MAX_LOCK_DEPTH,		"max_lock_depth" },
	{ CTL_INT,	KERN_NMI_WATCHDOG,		"nmi_watchdog" },
	{ CTL_INT,	KERN_PANIC_ON_NMI,		"panic_on_unrecovered_nmi" },
	{}
};
Loading