On Mon, Apr 17, 2017 at 04:44:49PM -0700, Paul E. McKenney wrote: > The definition of smp_mb__after_unlock_lock() is currently smp_mb() > for CONFIG_PPC and a no-op otherwise. It would be better to instead > provide an architecture-selectable Kconfig option, and select the > strength of smp_mb__after_unlock_lock() based on that option. This > commit therefore creates ARCH_WEAK_RELEASE_ACQUIRE, has PPC select it, > and bases the definition of smp_mb__after_unlock_lock() on this new > ARCH_WEAK_RELEASE_ACQUIRE Kconfig option. > > Reported-by: Ingo Molnar <mi...@kernel.org> > Signed-off-by: Paul E. McKenney <paul...@linux.vnet.ibm.com> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Will Deacon <will.dea...@arm.com> > Cc: Boqun Feng <boqun.f...@linux.vnet.ibm.com> > Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> > Cc: Paul Mackerras <pau...@samba.org> > Acked-by: Michael Ellerman <m...@ellerman.id.au> > Cc: <linuxppc-dev@lists.ozlabs.org>
Seems sensible. Reviewed-by: Josh Triplett <j...@joshtriplett.org> > arch/Kconfig | 3 +++ > arch/powerpc/Kconfig | 1 + > include/linux/rcupdate.h | 6 +++--- > 3 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/arch/Kconfig b/arch/Kconfig > index cd211a14a88f..adefaf344239 100644 > --- a/arch/Kconfig > +++ b/arch/Kconfig > @@ -320,6 +320,9 @@ config HAVE_CMPXCHG_LOCAL > config HAVE_CMPXCHG_DOUBLE > bool > > +config ARCH_WEAK_RELEASE_ACQUIRE > + bool > + > config ARCH_WANT_IPC_PARSE_VERSION > bool > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > index 97a8bc8a095c..7a5c9b764cd2 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -99,6 +99,7 @@ config PPC > select ARCH_USE_BUILTIN_BSWAP > select ARCH_USE_CMPXCHG_LOCKREF if PPC64 > select ARCH_WANT_IPC_PARSE_VERSION > + select ARCH_WEAK_RELEASE_ACQUIRE > select BINFMT_ELF > select BUILDTIME_EXTABLE_SORT > select CLONE_BACKWARDS > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h > index de88b33c0974..e6146d0074f8 100644 > --- a/include/linux/rcupdate.h > +++ b/include/linux/rcupdate.h > @@ -1127,11 +1127,11 @@ do { \ > * if the UNLOCK and LOCK are executed by the same CPU or if the > * UNLOCK and LOCK operate on the same lock variable. > */ > -#ifdef CONFIG_PPC > +#ifdef CONFIG_ARCH_WEAK_RELEASE_ACQUIRE > #define smp_mb__after_unlock_lock() smp_mb() /* Full ordering for lock. */ > -#else /* #ifdef CONFIG_PPC */ > +#else /* #ifdef CONFIG_ARCH_WEAK_RELEASE_ACQUIRE */ > #define smp_mb__after_unlock_lock() do { } while (0) > -#endif /* #else #ifdef CONFIG_PPC */ > +#endif /* #else #ifdef CONFIG_ARCH_WEAK_RELEASE_ACQUIRE */ > > > #endif /* __LINUX_RCUPDATE_H */ > -- > 2.5.2 >