[01/11] kernel/debug: Make use of KGDB_REASON_NMI

Message ID 1343649500-18491-1-git-send-email-anton.vorontsov@linaro.org
State Accepted
Commit b10d22d6e8f76b9e94871aebe0fc62aab2748200
Headers show

Commit Message

Anton Vorontsov July 30, 2012, 11:58 a.m.
Currently kernel never set KGDB_REASON_NMI. We do now, when we enter
KGDB/KDB from an NMI.

This is not to be confused with kgdb_nmicallback(), NMI callback is
an entry for the slave CPUs during CPUs roundup, but REASON_NMI is the
entry for the master CPU.

Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
---
 kernel/debug/kdb/kdb_debugger.c |    4 ++++
 1 file changed, 4 insertions(+)

Comments

Jason Wessel July 31, 2012, 3:53 a.m. | #1
On 07/30/2012 06:58 AM, Anton Vorontsov wrote:
> Currently kernel never set KGDB_REASON_NMI. We do now, when we enter
> KGDB/KDB from an NMI.
>
> This is not to be confused with kgdb_nmicallback(), NMI callback is
> an entry for the slave CPUs during CPUs roundup, but REASON_NMI is the
> entry for the master CPU.

No need for confusion here :-)

I'll take this one for the kernel merge window if it passes regression tests, no reason not to be setting the stop codes properly.

Thanks,
Jason.

Patch

diff --git a/kernel/debug/kdb/kdb_debugger.c b/kernel/debug/kdb/kdb_debugger.c
index 8b68ce7..be7b33b 100644
--- a/kernel/debug/kdb/kdb_debugger.c
+++ b/kernel/debug/kdb/kdb_debugger.c
@@ -12,6 +12,7 @@ 
 #include <linux/kdb.h>
 #include <linux/kdebug.h>
 #include <linux/export.h>
+#include <linux/hardirq.h>
 #include "kdb_private.h"
 #include "../debug_core.h"
 
@@ -52,6 +53,9 @@  int kdb_stub(struct kgdb_state *ks)
 	if (atomic_read(&kgdb_setting_breakpoint))
 		reason = KDB_REASON_KEYBOARD;
 
+	if (in_nmi())
+		reason = KDB_REASON_NMI;
+
 	for (i = 0, bp = kdb_breakpoints; i < KDB_MAXBPT; i++, bp++) {
 		if ((bp->bp_enabled) && (bp->bp_addr == addr)) {
 			reason = KDB_REASON_BREAK;