On Fri, 2014-06-06 at 19:53 +0200, Peter Zijlstra wrote: > On Fri, Jun 06, 2014 at 10:22:21AM -0700, Linus Torvalds wrote: > > On Fri, Jun 6, 2014 at 10:11 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > > > > +config ARCH_NO_ATOMIC_RMW > > > + def_bool y > > > + depends on PARISC || SPARC32 || METAG_ATOMICITY_LOCK1 || (TILE && !TILEGX) || (ARC && !ARC_HAS_LLSC) > > > > Ugh. We've had these kinds of things before, and they are broken and > > nasty to maintain. > > > > Just make it > > > > config ARCH_SUPPORTS_ATOMIC_RMW > > bool > > > > which defaults to no. And then make MUTEX_SPIN_ON_OWNER depend on that. > > --- > Subject: locking, mutex: Make optimistic spinning depend on ARCH_SUPPORTS_ATOMIC_RMW > > The optimistic spin code assumes regular stores and cmpxchg() play nice; > this is found to not be true for at least: parisc, sparc32, tile32, > metag-lock1, arc-!llsc and hexagon. > > There is further wreckage, but this in particular seemed easy to > trigger, so blacklist this. > > Opt in for known good archs. > > Reported-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> > Signed-off-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > --- > arch/arm/Kconfig | 1 + > arch/arm64/Kconfig | 1 + > arch/powerpc/Kconfig | 1 + > arch/sparc/Kconfig | 1 + > arch/x86/Kconfig | 1 + > kernel/Kconfig.locks | 5 ++++- > 6 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index a2c1a18a7275..b8a6a5078eae 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -6,6 +6,7 @@ config ARM > select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST > select ARCH_HAVE_CUSTOM_GPIO_H > select ARCH_MIGHT_HAVE_PC_PARPORT > + select ARCH_SUPPORTS_ATOMIC_RMW > select ARCH_USE_BUILTIN_BSWAP > select ARCH_USE_CMPXCHG_LOCKREF > select ARCH_WANT_IPC_PARSE_VERSION > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 5c30b10c0f6c..339dc07f15e2 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -3,6 +3,7 @@ config ARM64 > select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE > select ARCH_USE_CMPXCHG_LOCKREF > select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST > + select ARCH_SUPPORTS_ATOMIC_RMW > select ARCH_WANT_OPTIONAL_GPIOLIB > select ARCH_WANT_COMPAT_IPC_PARSE_VERSION > select ARCH_WANT_FRAME_POINTERS > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > index e0998997943b..5bb96f282373 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -145,6 +145,7 @@ config PPC > select HAVE_IRQ_EXIT_ON_IRQ_STACK > select ARCH_USE_CMPXCHG_LOCKREF if PPC64 > select HAVE_ARCH_AUDITSYSCALL > + select ARCH_SUPPORTS_ATOMIC_RMW > > config GENERIC_CSUM > def_bool CPU_LITTLE_ENDIAN > diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig > index 29f2e988c56a..407c87d9879a 100644 > --- a/arch/sparc/Kconfig > +++ b/arch/sparc/Kconfig > @@ -78,6 +78,7 @@ config SPARC64 > select HAVE_C_RECORDMCOUNT > select NO_BOOTMEM > select HAVE_ARCH_AUDITSYSCALL > + select ARCH_SUPPORTS_ATOMIC_RMW Sparc64 does, Sparc32 doesn't, so shouldn't that be select ARCH_SUPPORTS_ATOMIC_RMW if 64BIT ? Other than this, looks good to me (you can add reviewed by or acked by from me to your taste). James -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html