diff options
Diffstat (limited to 'arch/blackfin')
-rw-r--r-- | arch/blackfin/kernel/kgdb.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/blackfin/kernel/kgdb.c b/arch/blackfin/kernel/kgdb.c index edae461b1c54..e89ef34f744f 100644 --- a/arch/blackfin/kernel/kgdb.c +++ b/arch/blackfin/kernel/kgdb.c | |||
@@ -345,6 +345,18 @@ void kgdb_roundup_cpu(int cpu, unsigned long flags) | |||
345 | } | 345 | } |
346 | #endif | 346 | #endif |
347 | 347 | ||
348 | #ifdef CONFIG_IPIPE | ||
349 | static unsigned long kgdb_arch_imask; | ||
350 | |||
351 | void kgdb_post_primary_code(struct pt_regs *regs, int e_vector, int err_code) | ||
352 | { | ||
353 | if (kgdb_arch_imask) { | ||
354 | cpu_pda[raw_smp_processor_id()].ex_imask = kgdb_arch_imask; | ||
355 | kgdb_arch_imask = 0; | ||
356 | } | ||
357 | } | ||
358 | #endif | ||
359 | |||
348 | int kgdb_arch_handle_exception(int vector, int signo, | 360 | int kgdb_arch_handle_exception(int vector, int signo, |
349 | int err_code, char *remcom_in_buffer, | 361 | int err_code, char *remcom_in_buffer, |
350 | char *remcom_out_buffer, | 362 | char *remcom_out_buffer, |
@@ -388,6 +400,11 @@ int kgdb_arch_handle_exception(int vector, int signo, | |||
388 | * kgdb_single_step > 0 means in single step mode | 400 | * kgdb_single_step > 0 means in single step mode |
389 | */ | 401 | */ |
390 | kgdb_single_step = i + 1; | 402 | kgdb_single_step = i + 1; |
403 | |||
404 | #ifdef CONFIG_IPIPE | ||
405 | kgdb_arch_imask = cpu_pda[raw_smp_processor_id()].ex_imask; | ||
406 | cpu_pda[raw_smp_processor_id()].ex_imask = 0; | ||
407 | #endif | ||
391 | } | 408 | } |
392 | 409 | ||
393 | bfin_correct_hw_break(); | 410 | bfin_correct_hw_break(); |
@@ -448,6 +465,9 @@ void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip) | |||
448 | int kgdb_arch_init(void) | 465 | int kgdb_arch_init(void) |
449 | { | 466 | { |
450 | kgdb_single_step = 0; | 467 | kgdb_single_step = 0; |
468 | #ifdef CONFIG_IPIPE | ||
469 | kgdb_arch_imask = 0; | ||
470 | #endif | ||
451 | 471 | ||
452 | bfin_remove_all_hw_break(); | 472 | bfin_remove_all_hw_break(); |
453 | return 0; | 473 | return 0; |