diff options
author | Kirill Tkhai <tkhai@yandex.ru> | 2013-09-14 16:02:11 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-11-14 14:57:21 -0800 |
commit | 812cb83a56a908729c453a7db3fb2c262119bc9d (patch) | |
tree | 3fdf3df047276db7de85558ff6caff006c3b1cc4 /arch/sparc/kernel/kgdb_64.c | |
parent | 1a36265bf7d7e16b35fab5ae7f2f5d499bd0c14d (diff) |
sparc64: Implement HAVE_CONTEXT_TRACKING
Mark the places when the system are in user or are in kernel.
This is used to make full dynticks system (tickless) --
CONFIG_NO_HZ_FULL dependence.
Signed-off-by: Kirill Tkhai <tkhai@yandex.ru>
CC: David Miller <davem@davemloft.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/kgdb_64.c')
-rw-r--r-- | arch/sparc/kernel/kgdb_64.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/sparc/kernel/kgdb_64.c b/arch/sparc/kernel/kgdb_64.c index 53c0a82e603..60b19f50c80 100644 --- a/arch/sparc/kernel/kgdb_64.c +++ b/arch/sparc/kernel/kgdb_64.c @@ -159,11 +159,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 +172,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) |