diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2008-10-06 14:50:59 -0400 |
---|---|---|
committer | Jason Wessel <jason.wessel@windriver.com> | 2008-10-06 14:50:59 -0400 |
commit | e85ceae9102f6e3c1d707e7ac88fa48d252e9cfa (patch) | |
tree | c0ea708310452d42b35ea3eb422654fc4fd1f778 /arch/x86/kernel | |
parent | fec6ed1d1f9b78a6acb4a3eb2c46c812ac2e96f0 (diff) |
kgdb, x86: Avoid invoking kgdb_nmicallback twice per NMI
Stress-testing KVM's latest NMI support with kgdbts inside an SMP guest,
I came across spurious unhandled NMIs while running the singlestep test.
Looking closer at the code path each NMI takes when KGDB is enabled, I
noticed that kgdb_nmicallback is called twice per event: One time via
DIE_NMI_IPI notification, the second time on DIE_NMI. Removing the first
invocation cures the unhandled NMIs here.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/kgdb.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index 8282a2139681..10435a120d22 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c | |||
@@ -455,12 +455,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd) | |||
455 | return NOTIFY_DONE; | 455 | return NOTIFY_DONE; |
456 | 456 | ||
457 | case DIE_NMI_IPI: | 457 | case DIE_NMI_IPI: |
458 | if (atomic_read(&kgdb_active) != -1) { | 458 | /* Just ignore, we will handle the roundup on DIE_NMI. */ |
459 | /* KGDB CPU roundup */ | ||
460 | kgdb_nmicallback(raw_smp_processor_id(), regs); | ||
461 | was_in_debug_nmi[raw_smp_processor_id()] = 1; | ||
462 | touch_nmi_watchdog(); | ||
463 | } | ||
464 | return NOTIFY_DONE; | 459 | return NOTIFY_DONE; |
465 | 460 | ||
466 | case DIE_NMIUNKNOWN: | 461 | case DIE_NMIUNKNOWN: |