Skip to content

Commit

Permalink
Blackfin: kgdb: disable interrupt when single stepping in ADEOS
Browse files Browse the repository at this point in the history
When ADEOS and kgdb are both enabled, single step in linux kernel may be
scheduled to Xenomai core after return from interrupt handlers.  This
blocks gdb continue operation after a break point is hit.  So, disable
interrupt when running gdb single step.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
  • Loading branch information
Sonic Zhang authored and Mike Frysinger committed Jan 10, 2011
1 parent 84e97c1 commit 900de05
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions arch/blackfin/kernel/kgdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,18 @@ void kgdb_roundup_cpu(int cpu, unsigned long flags)
}
#endif

#ifdef CONFIG_IPIPE
static unsigned long kgdb_arch_imask;

void kgdb_post_primary_code(struct pt_regs *regs, int e_vector, int err_code)
{
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,
char *remcom_out_buffer,
Expand Down Expand Up @@ -388,6 +400,11 @@ int kgdb_arch_handle_exception(int vector, int signo,
* kgdb_single_step > 0 means in single step mode
*/
kgdb_single_step = i + 1;

#ifdef CONFIG_IPIPE
kgdb_arch_imask = cpu_pda[raw_smp_processor_id()].ex_imask;
cpu_pda[raw_smp_processor_id()].ex_imask = 0;
#endif
}

bfin_correct_hw_break();
Expand Down Expand Up @@ -448,6 +465,9 @@ void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip)
int kgdb_arch_init(void)
{
kgdb_single_step = 0;
#ifdef CONFIG_IPIPE
kgdb_arch_imask = 0;
#endif

bfin_remove_all_hw_break();
return 0;
Expand Down

0 comments on commit 900de05

Please sign in to comment.