diff --git a/arch/blackfin/kernel/kgdb.c b/arch/blackfin/kernel/kgdb.c
index e89ef34f744f4bf475950461825b923bb319c3f5..eb92592fd80ccb4beddb6ee828179c05f03d3d90 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;