MIPS: CMP: Fix memory barriers for correct operation of amon_cpu_start
authorChris Dearman <chris@mips.com>
Fri, 10 Jul 2009 09:06:38 +0000 (02:06 -0700)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 2 Nov 2009 11:00:05 +0000 (12:00 +0100)
Signed-off-by: Chris Dearman (chris@mips.com)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/mti-malta/malta-amon.c

index df9e526312a24ce4772cb3a332dcab66c3927a50..469d9b0cee6dd16f80d402d5cce6ae73d8ca245e 100644 (file)
@@ -70,11 +70,12 @@ void amon_cpu_start(int cpu,
        launch->sp = sp;
        launch->a0 = a0;
 
-       /* Make sure target sees parameters before the go bit */
-       smp_mb();
-
+       smp_wmb();              /* Target must see parameters before go */
        launch->flags |= LAUNCH_FGO;
+       smp_wmb();              /* Target must see go before we poll  */
+
        while ((launch->flags & LAUNCH_FGONE) == 0)
                ;
+       smp_rmb();      /* Target will be updating flags soon */
        pr_debug("launch: cpu%d gone!\n", cpu);
 }