diff options
Diffstat (limited to 'arch/sparc/kernel/kgdb_64.c')
| -rw-r--r-- | arch/sparc/kernel/kgdb_64.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/sparc/kernel/kgdb_64.c b/arch/sparc/kernel/kgdb_64.c index 53c0a82e603..cbf21d0870e 100644 --- a/arch/sparc/kernel/kgdb_64.c +++ b/arch/sparc/kernel/kgdb_64.c @@ -6,12 +6,15 @@  #include <linux/kgdb.h>  #include <linux/kdebug.h>  #include <linux/ftrace.h> +#include <linux/context_tracking.h>  #include <asm/cacheflush.h>  #include <asm/kdebug.h>  #include <asm/ptrace.h>  #include <asm/irq.h> +#include "kernel.h" +  void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)  {  	struct reg_window *win; @@ -159,11 +162,12 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,  asmlinkage void kgdb_trap(unsigned long trap_level, struct pt_regs *regs)  { +	enum ctx_state prev_state = exception_enter();  	unsigned long flags;  	if (user_mode(regs)) {  		bad_trap(regs, trap_level); -		return; +		goto out;  	}  	flushw_all(); @@ -171,6 +175,8 @@ asmlinkage void kgdb_trap(unsigned long trap_level, struct pt_regs *regs)  	local_irq_save(flags);  	kgdb_handle_exception(0x172, SIGTRAP, 0, regs);  	local_irq_restore(flags); +out: +	exception_exit(prev_state);  }  int kgdb_arch_init(void)  | 
