On Thu, May 30, 2024 at 08:05:50PM +0200, Arnd Bergmann wrote: > On Thu, May 30, 2024, at 19:24, Paul E. McKenney wrote: > > On Thu, May 30, 2024 at 09:37:21AM -0700, Paul E. McKenney wrote: > >> On Thu, May 30, 2024 at 03:27:58PM +0200, Arnd Bergmann wrote: > > > And for an untested first attempt at a fix. > > > > What did I mess up this time? ;-) > > > > I think only the comment: > > > > > switch (size) { > > -#ifndef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ > > +#ifdef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ > > + case 1: > > + oldval = cmpxchg_emu_u8((volatile u8 *)ptr, old, new); > > + break; > > +#else > > "min ARCH >= ARMv6K" now applies to the #else side, while the > #if side is the early ARMv6 (pre-v6K). Good catch! I plan to fold the following into the original with attribution. Thanx, Paul ------------------------------------------------------------------------ diff --git a/arch/arm/include/asm/cmpxchg.h b/arch/arm/include/asm/cmpxchg.h index fd9b99f4dca46..34674a4118755 100644 --- a/arch/arm/include/asm/cmpxchg.h +++ b/arch/arm/include/asm/cmpxchg.h @@ -162,11 +162,11 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, prefetchw((const void *)ptr); switch (size) { -#ifdef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */ +#ifdef CONFIG_CPU_V6 /* min ARCH < ARMv6K */ case 1: oldval = cmpxchg_emu_u8((volatile u8 *)ptr, old, new); break; -#else +#else /* min ARCH >= ARMv6K */ case 1: do { asm volatile("@ __cmpxchg1\n"