]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
powerpc/64: Fix smp_wmb barrier definition use use lwsync consistently
authorNicholas Piggin <npiggin@gmail.com>
Thu, 22 Mar 2018 10:41:46 +0000 (20:41 +1000)
committerSasha Levin <alexander.levin@microsoft.com>
Wed, 23 May 2018 01:36:33 +0000 (21:36 -0400)
[ Upstream commit 0bfdf598900fd62869659f360d3387ed80eb71cf ]

asm/barrier.h is not always included after asm/synch.h, which meant
it was missing __SUBARCH_HAS_LWSYNC, so in some files smp_wmb() would
be eieio when it should be lwsync. kernel/time/hrtimer.c is one case.

__SUBARCH_HAS_LWSYNC is only used in one place, so just fold it in
to where it's used. Previously with my small simulator config, 377
instances of eieio in the tree. After this patch there are 55.

Fixes: 46d075be585e ("powerpc: Optimise smp_wmb")
Cc: stable@vger.kernel.org # v2.6.29+
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
arch/powerpc/include/asm/barrier.h
arch/powerpc/include/asm/synch.h

index a3bf5be111ff1d073eb329476ce773c07ce32ed5..bedaf3e3c5588f7e303d53f2b676b5acc7dd7ba2 100644 (file)
@@ -36,7 +36,8 @@
 
 #define set_mb(var, value)     do { var = value; mb(); } while (0)
 
-#ifdef __SUBARCH_HAS_LWSYNC
+/* The sub-arch has lwsync */
+#if defined(__powerpc64__) || defined(CONFIG_PPC_E500MC)
 #    define SMPWMB      LWSYNC
 #else
 #    define SMPWMB      eieio
index c50868681f9ead40b285cdc4bb411e43123fb3ff..e8d6a842f4bbe7055a1789f249e2f86b6bd39ae9 100644 (file)
@@ -5,10 +5,6 @@
 #include <linux/stringify.h>
 #include <asm/feature-fixups.h>
 
-#if defined(__powerpc64__) || defined(CONFIG_PPC_E500MC)
-#define __SUBARCH_HAS_LWSYNC
-#endif
-
 #ifndef __ASSEMBLY__
 extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup;
 extern void do_lwsync_fixups(unsigned long value, void *fixup_start,