summaryrefslogtreecommitdiffstats
path: root/arch/mips64/kernel/scall_o32.S
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2001-06-10 16:17:47 +0000
committerRalf Baechle <ralf@linux-mips.org>2001-06-10 16:17:47 +0000
commit4c2d47edfd6114ce818a93c97a5f34ca38c6c5f3 (patch)
tree582925a7fcd23fb71927e4d9f0b9d0c9182572f0 /arch/mips64/kernel/scall_o32.S
parent764fb51bab6c4f71a6708a275d246d260cc7fa05 (diff)
We were not always calling handle_softirq resulting in softirqs
potencially delayed. 32-bit kernel got it wrong for the SMP case.
Diffstat (limited to 'arch/mips64/kernel/scall_o32.S')
-rw-r--r--arch/mips64/kernel/scall_o32.S10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/mips64/kernel/scall_o32.S b/arch/mips64/kernel/scall_o32.S
index 935d72848..c529ac04b 100644
--- a/arch/mips64/kernel/scall_o32.S
+++ b/arch/mips64/kernel/scall_o32.S
@@ -76,8 +76,14 @@ stack_done:
1: sd v0, PT_R2(sp) # result
FEXPORT(o32_ret_from_sys_call)
- lw t0, irq_stat # softirq_active
- lw t1, irq_stat+4 # softirq_mask. unused delay slot
+ la t1, irq_stat # softirq_active
+#ifdef CONFIG_SMP
+ lwu t0, TASK_PROCESSOR($28)
+ dsll t0, t0, 5
+ daddu t1, t0
+#endif
+ lw t0, 0(t1) # softirq_active
+ lw t1, 4(t1) # softirq_mask. unused delay slot
and t0, t1
bnez t0, o32_handle_softirq