Blackfin: kgdb: disable preempt schedule when running single step in kgdb
authorSonic Zhang <sonic.zhang@analog.com>
Wed, 17 Nov 2010 06:52:39 +0000 (06:52 +0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 10 Jan 2011 12:18:23 +0000 (07:18 -0500)
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>
arch/blackfin/kernel/kgdb.c

index e89ef34..eb92592 100644 (file)
@@ -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;