|
@@ -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;
|