[PATCH] ppc64: Add a sync in context switch on SMP

From: Benjamin Herrenschmidt
Date: Tue Mar 30 2004 - 00:47:14 EST

Hi !

For the same reason as ppc32, we need to ensure that all stores
done on a CPU has reached the coherency domain and are visible
to loads done by another CPU when context switching as the same
thread may be rescheduled almost right away there.


diff -urN linux-2.5/arch/ppc64/kernel/entry.S linuxppc-2.5-benh/arch/ppc64/kernel/entry.S
--- linux-2.5/arch/ppc64/kernel/entry.S 2004-03-30 15:15:17.000000000 +1000
+++ linuxppc-2.5-benh/arch/ppc64/kernel/entry.S 2004-03-30 14:55:47.000000000 +1000
@@ -289,6 +289,14 @@
std r23,_CCR(r1)
std r1,KSP(r3) /* Set old stack pointer */

+#ifdef CONFIG_SMP
+ /* We need a sync somewhere here to make sure that if the
+ * previous task gets rescheduled on another CPU, it sees all
+ * stores it has performed on this one.
+ */
+ sync
+#endif /* CONFIG_SMP */
addi r6,r4,-THREAD /* Convert THREAD to 'current' */
std r6,PACACURRENT(r13) /* Set new 'current' */

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/