d359752407
This patch fixes the hang regression with kgdb when the NMI interrupt comes in while the master core is returning from an exception. Adjust the NMI logic such that KGDB will not stop NMI exceptions from occurring by in general returning NOTIFY_DONE. It is not possible to distinguish the debug NMI sync vs the normal NMI apic interrupt so kgdb needs to catch the unknown NMI if it the debugger was previously active on one of the cpus. Signed-off-by: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
38 lines
936 B
C
38 lines
936 B
C
#ifndef _ASM_X86_KDEBUG_H
|
|
#define _ASM_X86_KDEBUG_H
|
|
|
|
#include <linux/notifier.h>
|
|
|
|
struct pt_regs;
|
|
|
|
/* Grossly misnamed. */
|
|
enum die_val {
|
|
DIE_OOPS = 1,
|
|
DIE_INT3,
|
|
DIE_DEBUG,
|
|
DIE_PANIC,
|
|
DIE_NMI,
|
|
DIE_DIE,
|
|
DIE_NMIWATCHDOG,
|
|
DIE_KERNELDEBUG,
|
|
DIE_TRAP,
|
|
DIE_GPF,
|
|
DIE_CALL,
|
|
DIE_NMI_IPI,
|
|
DIE_PAGE_FAULT,
|
|
DIE_NMIUNKNOWN,
|
|
};
|
|
|
|
extern void printk_address(unsigned long address, int reliable);
|
|
extern void die(const char *,struct pt_regs *,long);
|
|
extern int __must_check __die(const char *, struct pt_regs *, long);
|
|
extern void show_registers(struct pt_regs *regs);
|
|
extern void __show_registers(struct pt_regs *, int all);
|
|
extern void show_trace(struct task_struct *t, struct pt_regs *regs,
|
|
unsigned long *sp, unsigned long bp);
|
|
extern void __show_regs(struct pt_regs *regs);
|
|
extern void show_regs(struct pt_regs *regs);
|
|
extern unsigned long oops_begin(void);
|
|
extern void oops_end(unsigned long, struct pt_regs *, int signr);
|
|
|
|
#endif
|