On Mon, 9 Oct 2006 14:53:33 +0100, Ralf Baechle <ralf@xxxxxxxxxxxxxx> wrote: > ipi_decode() has lost it's pt_regs argument like most of the interrupt > related functions, so Atushi's patch was right. Any interrupt handler > that wants to get a pointer to the register frame can do so by calling > get_irq_regs(). Yes, excuse me for a terse description. > So with Atsushi's patch applied VSMP and SMTC with only two TCs activated > are working again. It still crashes with 5 TCs enabled: > > Cpu 1 > $ 0 : 00000000 18102000 00000000 8041ed44 > $ 4 : 00000000 00000000 8041ec88 00000000 > $ 8 : 00000000 18001c00 8010de78 80430000 > $12 : 80420000 fffffffb ffffffff 0000000a > $16 : 00000000 00000001 8041ec04 8041ec08 > $20 : 803b0000 8041ed40 80380000 18102000 > $24 : 00000000 810c3b11 > $28 : 810c2000 810c3b58 00000100 80108bdc > Hi : 00000009 > Lo : fbe7d600 > epc : 80132b74 profile_tick+0x20/0xb4 Not tainted > ra : 80108bdc local_timer_interrupt+0x10/0x30 > Status: 1100a603 KERNEL EXL IE Hmm, this would be because local_timer_interrupt was called from ipi_decode(). Is this a proper fix? diff --git a/arch/mips/kernel/smtc-asm.S b/arch/mips/kernel/smtc-asm.S index 1cb9441..20938a4 100644 --- a/arch/mips/kernel/smtc-asm.S +++ b/arch/mips/kernel/smtc-asm.S @@ -101,7 +101,9 @@ FEXPORT(__smtc_ipi_vector) lw t0,PT_PADSLOT5(sp) /* Argument from sender passed in stack pad slot 4 */ lw a0,PT_PADSLOT4(sp) - PTR_LA ra, _ret_from_irq + LONG_L s0, TI_REGS($28) + LONG_S sp, TI_REGS($28) + PTR_LA ra, ret_from_irq jr t0 /*