diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2007-05-24 09:56:58 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2007-06-11 13:20:53 -0400 |
commit | da9bc7263dc7e32d52dd922fe3f46eb7107c0143 (patch) | |
tree | edf2cb84da2d95f9444a7affd1432f802dee44a4 /arch/mips/kernel/smtc-asm.S | |
parent | fbf6ede2ce05592661cec04e04b88f6bab00eb09 (diff) |
[MIPS] SMTC: Don't set and restore irqregs ptr from self_ipi.
This did corrupt register s0 which the caller of self_ipi expects to
be unchanged. This is a kernel bug which will only be triggered with
the compilers which compile __smtc_ipi_replay to use s0 across the
invocation of self_ipi. Gcc 4.1.2 does this, for example.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/smtc-asm.S')
-rw-r--r-- | arch/mips/kernel/smtc-asm.S | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/arch/mips/kernel/smtc-asm.S b/arch/mips/kernel/smtc-asm.S index 921207c4a83c..20938a4cb52d 100644 --- a/arch/mips/kernel/smtc-asm.S +++ b/arch/mips/kernel/smtc-asm.S | |||
@@ -121,10 +121,7 @@ LEAF(self_ipi) | |||
121 | subu t1,sp,PT_SIZE | 121 | subu t1,sp,PT_SIZE |
122 | sw ra,PT_EPC(t1) | 122 | sw ra,PT_EPC(t1) |
123 | sw a0,PT_PADSLOT4(t1) | 123 | sw a0,PT_PADSLOT4(t1) |
124 | LONG_L s0, TI_REGS($28) | ||
125 | LONG_S sp, TI_REGS($28) | ||
126 | la t2,ipi_decode | 124 | la t2,ipi_decode |
127 | LONG_S s0, TI_REGS($28) | ||
128 | sw t2,PT_PADSLOT5(t1) | 125 | sw t2,PT_PADSLOT5(t1) |
129 | /* Save pre-disable value of TCStatus */ | 126 | /* Save pre-disable value of TCStatus */ |
130 | sw t0,PT_TCSTATUS(t1) | 127 | sw t0,PT_TCSTATUS(t1) |