diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2006-10-08 12:24:23 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-10-09 18:20:46 -0400 |
commit | f431baa55abf8adeed0c718b51deacbc151f58f1 (patch) | |
tree | fe0383328c1d8bcb0fae7e266a437b980a05a7f9 /arch/mips/kernel/entry.S | |
parent | 441ee341ad63572f39cb8074e31806b5b1471d0b (diff) |
[MIPS] ret_from_irq adjustment
Make sure that RA on top of interrupt stack is an address of ret_from_irq,
so that dump_stack etc. can trace info interrupted context.
Also this patch fixes except_vec_vi_handler and __smtc_ipi_vector which
seems broken.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/entry.S')
-rw-r--r-- | arch/mips/kernel/entry.S | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S index e93e43e1f42d..417c08ac76eb 100644 --- a/arch/mips/kernel/entry.S +++ b/arch/mips/kernel/entry.S | |||
@@ -20,10 +20,7 @@ | |||
20 | #include <asm/mipsmtregs.h> | 20 | #include <asm/mipsmtregs.h> |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | #ifdef CONFIG_PREEMPT | 23 | #ifndef CONFIG_PREEMPT |
24 | .macro preempt_stop | ||
25 | .endm | ||
26 | #else | ||
27 | .macro preempt_stop | 24 | .macro preempt_stop |
28 | local_irq_disable | 25 | local_irq_disable |
29 | .endm | 26 | .endm |
@@ -32,9 +29,16 @@ | |||
32 | 29 | ||
33 | .text | 30 | .text |
34 | .align 5 | 31 | .align 5 |
32 | FEXPORT(ret_from_irq) | ||
33 | LONG_S s0, TI_REGS($28) | ||
34 | #ifdef CONFIG_PREEMPT | ||
35 | FEXPORT(ret_from_exception) | ||
36 | #else | ||
37 | b _ret_from_irq | ||
35 | FEXPORT(ret_from_exception) | 38 | FEXPORT(ret_from_exception) |
36 | preempt_stop | 39 | preempt_stop |
37 | FEXPORT(ret_from_irq) | 40 | #endif |
41 | FEXPORT(_ret_from_irq) | ||
38 | LONG_L t0, PT_STATUS(sp) # returning to kernel mode? | 42 | LONG_L t0, PT_STATUS(sp) # returning to kernel mode? |
39 | andi t0, t0, KU_USER | 43 | andi t0, t0, KU_USER |
40 | beqz t0, resume_kernel | 44 | beqz t0, resume_kernel |