Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F132335215
D24558.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D24558.diff
View Options
Index: head/sys/kern/kern_shutdown.c
===================================================================
--- head/sys/kern/kern_shutdown.c
+++ head/sys/kern/kern_shutdown.c
@@ -119,9 +119,9 @@
#ifdef KDB
#ifdef KDB_UNATTENDED
-static int debugger_on_panic = 0;
+int debugger_on_panic = 0;
#else
-static int debugger_on_panic = 1;
+int debugger_on_panic = 1;
#endif
SYSCTL_INT(_debug, OID_AUTO, debugger_on_panic,
CTLFLAG_RWTUN | CTLFLAG_SECURE,
Index: head/sys/sys/kdb.h
===================================================================
--- head/sys/sys/kdb.h
+++ head/sys/sys/kdb.h
@@ -65,6 +65,7 @@
SET_DECLARE(kdb_dbbe_set, struct kdb_dbbe);
extern u_char kdb_active; /* Non-zero while in debugger. */
+extern int debugger_on_panic; /* enter the debugger on panic. */
extern int debugger_on_trap; /* enter the debugger on trap. */
extern struct kdb_dbbe *kdb_dbbe; /* Default debugger backend or NULL. */
extern struct trapframe *kdb_frame; /* Frame to kdb_trap(). */
Index: head/sys/x86/x86/cpu_machdep.c
===================================================================
--- head/sys/x86/x86/cpu_machdep.c
+++ head/sys/x86/x86/cpu_machdep.c
@@ -823,20 +823,14 @@
}
SYSINIT(cpu_idle_tun, SI_SUB_CPU, SI_ORDER_MIDDLE, cpu_idle_tun, NULL);
-static int panic_on_nmi = 1;
+static int panic_on_nmi = 0xff;
SYSCTL_INT(_machdep, OID_AUTO, panic_on_nmi, CTLFLAG_RWTUN,
&panic_on_nmi, 0,
- "Panic on NMI raised by hardware failure");
+ "Panic on NMI: 1 = H/W failure; 2 = unknown; 0xff = all");
int nmi_is_broadcast = 1;
SYSCTL_INT(_machdep, OID_AUTO, nmi_is_broadcast, CTLFLAG_RWTUN,
&nmi_is_broadcast, 0,
"Chipset NMI is broadcast");
-#ifdef KDB
-int kdb_on_nmi = 1;
-SYSCTL_INT(_machdep, OID_AUTO, kdb_on_nmi, CTLFLAG_RWTUN,
- &kdb_on_nmi, 0,
- "Go to KDB on NMI with unknown source");
-#endif
void
nmi_call_kdb(u_int cpu, u_int type, struct trapframe *frame)
@@ -847,19 +841,31 @@
/* machine/parity/power fail/"kitchen sink" faults */
if (isa_nmi(frame->tf_err)) {
claimed = true;
- if (panic_on_nmi)
+ if ((panic_on_nmi & 1) != 0)
panic("NMI indicates hardware failure");
}
#endif /* DEV_ISA */
+
+ /*
+ * NMIs can be useful for debugging. They can be hooked up to a
+ * pushbutton, usually on an ISA, PCI, or PCIe card. They can also be
+ * generated by an IPMI BMC, either manually or in response to a
+ * watchdog timeout. For example, see the "power diag" command in
+ * ports/sysutils/ipmitool. They can also be generated by a
+ * hypervisor; see "bhyvectl --inject-nmi".
+ */
+
#ifdef KDB
- if (!claimed && kdb_on_nmi) {
- /*
- * NMI can be hooked up to a pushbutton for debugging.
- */
- printf("NMI/cpu%d ... going to debugger\n", cpu);
- kdb_trap(type, 0, frame);
+ if (!claimed && (panic_on_nmi & 2) != 0) {
+ if (debugger_on_panic) {
+ printf("NMI/cpu%d ... going to debugger\n", cpu);
+ claimed = kdb_trap(type, 0, frame);
+ }
}
#endif /* KDB */
+
+ if (!claimed && panic_on_nmi != 0)
+ panic("NMI");
}
void
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Oct 17, 12:23 AM (1 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23810209
Default Alt Text
D24558.diff (2 KB)
Attached To
Mode
D24558: Fix handling of NMIs from unknown sources (BMC, hypervisor)
Attached
Detach File
Event Timeline
Log In to Comment