diff options
author | Sonic Zhang <sonic.zhang@analog.com> | 2010-11-17 09:52:39 +0300 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2011-01-10 15:18:23 +0300 |
commit | b68233e7f0126dfe59e1a064da9e37827c1f35ec (patch) | |
tree | 79f7891894b4a943a7166a42f8c404b1de281a39 /arch | |
parent | 900de05182d520ff66378e74a7b18f7d9971a32d (diff) | |
download | linux-b68233e7f0126dfe59e1a064da9e37827c1f35ec.tar.xz |
Blackfin: kgdb: disable preempt schedule when running single step in kgdb
Otherwise, gdb continue operation after a breakpoint is hit may trap
into endless breakpoint.
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/blackfin/kernel/kgdb.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/blackfin/kernel/kgdb.c b/arch/blackfin/kernel/kgdb.c index e89ef34f744f..eb92592fd80c 100644 --- a/arch/blackfin/kernel/kgdb.c +++ b/arch/blackfin/kernel/kgdb.c @@ -347,15 +347,20 @@ void kgdb_roundup_cpu(int cpu, unsigned long flags) #ifdef CONFIG_IPIPE static unsigned long kgdb_arch_imask; +#endif void kgdb_post_primary_code(struct pt_regs *regs, int e_vector, int err_code) { + if (kgdb_single_step) + preempt_enable(); + +#ifdef CONFIG_IPIPE if (kgdb_arch_imask) { cpu_pda[raw_smp_processor_id()].ex_imask = kgdb_arch_imask; kgdb_arch_imask = 0; } -} #endif +} int kgdb_arch_handle_exception(int vector, int signo, int err_code, char *remcom_in_buffer, @@ -401,6 +406,7 @@ int kgdb_arch_handle_exception(int vector, int signo, */ kgdb_single_step = i + 1; + preempt_disable(); #ifdef CONFIG_IPIPE kgdb_arch_imask = cpu_pda[raw_smp_processor_id()].ex_imask; cpu_pda[raw_smp_processor_id()].ex_imask = 0; |