| From: Nicholas Piggin <npiggin@gmail.com> |
| Date: Thu, 22 Mar 2018 20:41:46 +1000 |
| Subject: powerpc/64: Fix smp_wmb barrier definition use use lwsync |
| consistently |
| |
| commit 0bfdf598900fd62869659f360d3387ed80eb71cf upstream. |
| |
| 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") |
| Signed-off-by: Nicholas Piggin <npiggin@gmail.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/powerpc/include/asm/barrier.h | 3 ++- |
| arch/powerpc/include/asm/synch.h | 4 ---- |
| 2 files changed, 2 insertions(+), 5 deletions(-) |
| |
| --- a/arch/powerpc/include/asm/barrier.h |
| +++ b/arch/powerpc/include/asm/barrier.h |
| @@ -39,7 +39,8 @@ |
| |
| #ifdef CONFIG_SMP |
| |
| -#ifdef __SUBARCH_HAS_LWSYNC |
| +/* The sub-arch has lwsync */ |
| +#if defined(__powerpc64__) || defined(CONFIG_PPC_E500MC) |
| # define SMPWMB LWSYNC |
| #else |
| # define SMPWMB eieio |
| --- a/arch/powerpc/include/asm/synch.h |
| +++ b/arch/powerpc/include/asm/synch.h |
| @@ -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, |