diff options
Diffstat (limited to 'kernel/debug/kdb')
-rw-r--r-- | kernel/debug/kdb/kdb_debugger.c | 5 | ||||
-rw-r--r-- | kernel/debug/kdb/kdb_main.c | 3 |
2 files changed, 7 insertions, 1 deletions
diff --git a/kernel/debug/kdb/kdb_debugger.c b/kernel/debug/kdb/kdb_debugger.c index 328d18ef31e4..8859ca34dcfe 100644 --- a/kernel/debug/kdb/kdb_debugger.c +++ b/kernel/debug/kdb/kdb_debugger.c | |||
@@ -69,7 +69,10 @@ int kdb_stub(struct kgdb_state *ks) | |||
69 | if (atomic_read(&kgdb_setting_breakpoint)) | 69 | if (atomic_read(&kgdb_setting_breakpoint)) |
70 | reason = KDB_REASON_KEYBOARD; | 70 | reason = KDB_REASON_KEYBOARD; |
71 | 71 | ||
72 | if (in_nmi()) | 72 | if (ks->err_code == KDB_REASON_SYSTEM_NMI && ks->signo == SIGTRAP) |
73 | reason = KDB_REASON_SYSTEM_NMI; | ||
74 | |||
75 | else if (in_nmi()) | ||
73 | reason = KDB_REASON_NMI; | 76 | reason = KDB_REASON_NMI; |
74 | 77 | ||
75 | for (i = 0, bp = kdb_breakpoints; i < KDB_MAXBPT; i++, bp++) { | 78 | for (i = 0, bp = kdb_breakpoints; i < KDB_MAXBPT; i++, bp++) { |
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c index 00eb8f7fbf41..0b097c8a1e50 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c | |||
@@ -1200,6 +1200,9 @@ static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs, | |||
1200 | instruction_pointer(regs)); | 1200 | instruction_pointer(regs)); |
1201 | kdb_dumpregs(regs); | 1201 | kdb_dumpregs(regs); |
1202 | break; | 1202 | break; |
1203 | case KDB_REASON_SYSTEM_NMI: | ||
1204 | kdb_printf("due to System NonMaskable Interrupt\n"); | ||
1205 | break; | ||
1203 | case KDB_REASON_NMI: | 1206 | case KDB_REASON_NMI: |
1204 | kdb_printf("due to NonMaskable Interrupt @ " | 1207 | kdb_printf("due to NonMaskable Interrupt @ " |
1205 | kdb_machreg_fmt "\n", | 1208 | kdb_machreg_fmt "\n", |