All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <david.laight.linux@gmail.com>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Bradley Morgan <brads@mainlining.org>,
	akpm@linux-foundation.org, vgupta@kernel.org, guoren@kernel.org,
	chris@zankel.net, jcmvbkbc@gmail.com, arnd@arndb.de,
	glaubitz@physik.fu-berlin.de, ysato@users.sourceforge.jp,
	dalias@libc.org, linux-snps-arc@lists.infradead.org,
	linux-csky@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 0/3] Add two-byte cmpxchg emulation and wire it into the architectures
Date: Tue, 6 Oct 2026 22:25:46 +0100	[thread overview]
Message-ID: <20261006222546.6b667d1a@pumpkin> (raw)
In-Reply-To: <84b6f3c7-e498-4931-97c2-75ea5158b99a@paulmck-laptop>

On Tue, 6 Oct 2026 11:16:42 -0700
"Paul E. McKenney" <paulmck@kernel.org> wrote:

> On Mon, Oct 05, 2026 at 07:02:05PM +0100, David Laight wrote:
> > On Mon,  5 Oct 2026 12:06:57 +0000
> > Bradley Morgan <brads@mainlining.org> wrote:
> >   
> > > This is v5 of the two-byte cmpxchg emulation series, reduced to the
> > > three architectures still missing after Paul McKenney queued the lib
> > > and sh patches, ARC, csky and xtensa.
> > > 
> > > The v4 attempt at these folded in a type checking idiom,
> > > (unsigned long)(0 ? *ptr : old), meant to make cmpxchg(&p, 4, 5) fail
> > > to compile. The kernel test robot and Vineet Gupta showed that idiom
> > > breaks real callers, fs/crypto/hooks.c passes a char * and an
> > > unsigned char * to cmpxchg_release(),  
> > 
> > That ought to be a bug...  
> 
> Perhaps it is?  Here is the code:
> 
> 	cmpxchg_release(&inode->i_link, NULL, pstr.name)
> 
> And inode is a struct inode, of which ->i_link is char*.  For its part,
> pstr is a struct fscrypt_str, of which ->name is unsigned char *.
> 
> But this is either a 4-byte or 8-byte cmpxchg_release(), depending on
> CONFIG_64BIT, which is orthogonal to this patch series, which provides
> 2-byte emulation.
> 
> Therefore, I see no reason to hold up these cmpxchg_emu_u16() patches.

True.

David

> 
> But please let me know if I am missing something.
> 
> 							Thanx, Paul
> 
> > David
> >   
> > > and the conditional expression
> > > then has incompatible pointer types, which is a hard error on gcc 14
> > > and newer. So this version only adds the case 2 dispatch, the
> > > declarations the architectures already have are kept as is.
> > > 
> > > The ARC sizeof bug that v4 fixed along the way is in mainline
> > > separately through Vineet's f050c3e61d2a ("ARC: arch_cmpxchg_relaxed
> > > to use size of pointed type not pointer"), so the ARC patch here is
> > > only the case 2 wiring on top of that.
> > > 
> > > On the why, RCU previously used single-byte cmpxchg(), which is what
> > > motivated cmpxchg_emu_u8() in the first place, and Paul has now
> > > queued cmpxchg_emu_u16(). Unused new code is frowned upon, so wiring
> > > it into the architectures that need it is the missing half, and
> > > there are existing workarounds for the missing two-byte cmpxchg() in
> > > the tree, _Q_PENDING_BITS for one, that can make use of it.
> > > 
> > > Per Paul's suggestion each patch is standalone and can go in
> > > independently, they only depend on the lib patch already queued.
> > > Each one was build tested with the real cross toolchain, ARC with
> > > arc-linux-gnu-gcc and csky and xtensa with the gcc 16.2 crosstool
> > > builds Vineet pointed at, W=1, with the macro instantiated on
> > > u8, u16, u32 and pointer types, confirming the new dispatch is
> > > reached and no new warnings appear. The pointer instantiation
> > > covers the fs/crypto/hooks.c case that broke v4.
> > > 
> > > Bradley Morgan (3):
> > >   ARC: Emulate two-byte cmpxchg
> > >   csky: Emulate two-byte cmpxchg
> > >   xtensa: Emulate two-byte cmpxchg
> > > 
> > >  arch/arc/include/asm/cmpxchg.h    | 3 +++
> > >  arch/csky/include/asm/cmpxchg.h   | 9 +++++++++
> > >  arch/xtensa/include/asm/cmpxchg.h | 1 +
> > >  3 files changed, 13 insertions(+)
> > >   
> >   


WARNING: multiple messages have this Message-ID (diff)
From: David Laight <david.laight.linux@gmail.com>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Bradley Morgan <brads@mainlining.org>,
	akpm@linux-foundation.org, vgupta@kernel.org, guoren@kernel.org,
	chris@zankel.net, jcmvbkbc@gmail.com, arnd@arndb.de,
	glaubitz@physik.fu-berlin.de, ysato@users.sourceforge.jp,
	dalias@libc.org, linux-snps-arc@lists.infradead.org,
	linux-csky@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 0/3] Add two-byte cmpxchg emulation and wire it into the architectures
Date: Tue, 6 Oct 2026 22:25:46 +0100	[thread overview]
Message-ID: <20261006222546.6b667d1a@pumpkin> (raw)
In-Reply-To: <84b6f3c7-e498-4931-97c2-75ea5158b99a@paulmck-laptop>

On Tue, 6 Oct 2026 11:16:42 -0700
"Paul E. McKenney" <paulmck@kernel.org> wrote:

> On Mon, Oct 05, 2026 at 07:02:05PM +0100, David Laight wrote:
> > On Mon,  5 Oct 2026 12:06:57 +0000
> > Bradley Morgan <brads@mainlining.org> wrote:
> >   
> > > This is v5 of the two-byte cmpxchg emulation series, reduced to the
> > > three architectures still missing after Paul McKenney queued the lib
> > > and sh patches, ARC, csky and xtensa.
> > > 
> > > The v4 attempt at these folded in a type checking idiom,
> > > (unsigned long)(0 ? *ptr : old), meant to make cmpxchg(&p, 4, 5) fail
> > > to compile. The kernel test robot and Vineet Gupta showed that idiom
> > > breaks real callers, fs/crypto/hooks.c passes a char * and an
> > > unsigned char * to cmpxchg_release(),  
> > 
> > That ought to be a bug...  
> 
> Perhaps it is?  Here is the code:
> 
> 	cmpxchg_release(&inode->i_link, NULL, pstr.name)
> 
> And inode is a struct inode, of which ->i_link is char*.  For its part,
> pstr is a struct fscrypt_str, of which ->name is unsigned char *.
> 
> But this is either a 4-byte or 8-byte cmpxchg_release(), depending on
> CONFIG_64BIT, which is orthogonal to this patch series, which provides
> 2-byte emulation.
> 
> Therefore, I see no reason to hold up these cmpxchg_emu_u16() patches.

True.

David

> 
> But please let me know if I am missing something.
> 
> 							Thanx, Paul
> 
> > David
> >   
> > > and the conditional expression
> > > then has incompatible pointer types, which is a hard error on gcc 14
> > > and newer. So this version only adds the case 2 dispatch, the
> > > declarations the architectures already have are kept as is.
> > > 
> > > The ARC sizeof bug that v4 fixed along the way is in mainline
> > > separately through Vineet's f050c3e61d2a ("ARC: arch_cmpxchg_relaxed
> > > to use size of pointed type not pointer"), so the ARC patch here is
> > > only the case 2 wiring on top of that.
> > > 
> > > On the why, RCU previously used single-byte cmpxchg(), which is what
> > > motivated cmpxchg_emu_u8() in the first place, and Paul has now
> > > queued cmpxchg_emu_u16(). Unused new code is frowned upon, so wiring
> > > it into the architectures that need it is the missing half, and
> > > there are existing workarounds for the missing two-byte cmpxchg() in
> > > the tree, _Q_PENDING_BITS for one, that can make use of it.
> > > 
> > > Per Paul's suggestion each patch is standalone and can go in
> > > independently, they only depend on the lib patch already queued.
> > > Each one was build tested with the real cross toolchain, ARC with
> > > arc-linux-gnu-gcc and csky and xtensa with the gcc 16.2 crosstool
> > > builds Vineet pointed at, W=1, with the macro instantiated on
> > > u8, u16, u32 and pointer types, confirming the new dispatch is
> > > reached and no new warnings appear. The pointer instantiation
> > > covers the fs/crypto/hooks.c case that broke v4.
> > > 
> > > Bradley Morgan (3):
> > >   ARC: Emulate two-byte cmpxchg
> > >   csky: Emulate two-byte cmpxchg
> > >   xtensa: Emulate two-byte cmpxchg
> > > 
> > >  arch/arc/include/asm/cmpxchg.h    | 3 +++
> > >  arch/csky/include/asm/cmpxchg.h   | 9 +++++++++
> > >  arch/xtensa/include/asm/cmpxchg.h | 1 +
> > >  3 files changed, 13 insertions(+)
> > >   
> >   


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

  reply	other threads:[~2026-10-06 21:25 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-05 12:06 [PATCH v5 0/3] Add two-byte cmpxchg emulation and wire it into the architectures Bradley Morgan
2026-10-05 12:06 ` Bradley Morgan
2026-10-05 12:06 ` [PATCH v5 1/3] ARC: Emulate two-byte cmpxchg Bradley Morgan
2026-10-05 12:06   ` Bradley Morgan
2026-10-06  9:55   ` kernel test robot
2026-10-06  9:55     ` kernel test robot
2026-10-05 12:06 ` [PATCH v5 2/3] csky: " Bradley Morgan
2026-10-05 12:06   ` Bradley Morgan
2026-10-05 12:07 ` [PATCH v5 3/3] xtensa: " Bradley Morgan
2026-10-05 12:07   ` Bradley Morgan
2026-10-06  9:54   ` kernel test robot
2026-10-06  9:54     ` kernel test robot
2026-10-06 15:44     ` Paul E. McKenney
2026-10-06 15:44       ` Paul E. McKenney
2026-10-06 15:46       ` Bradley Morgan
2026-10-06 15:46         ` Bradley Morgan
2026-10-06 16:10         ` Paul E. McKenney
2026-10-06 16:10           ` Paul E. McKenney
2026-10-07  8:26         ` Vineet Gupta
2026-10-07  8:26           ` Vineet Gupta
2026-10-07  8:24       ` Vineet Gupta
2026-10-07  8:24         ` Vineet Gupta
2026-10-07 15:56         ` Paul E. McKenney
2026-10-07 15:56           ` Paul E. McKenney
2026-10-05 12:19 ` [PATCH v5 0/3] Add two-byte cmpxchg emulation and wire it into the architectures Bradley Morgan
2026-10-05 12:19   ` Bradley Morgan
2026-10-05 18:02 ` David Laight
2026-10-05 18:02   ` David Laight
2026-10-06 18:16   ` Paul E. McKenney
2026-10-06 18:16     ` Paul E. McKenney
2026-10-06 21:25     ` David Laight [this message]
2026-10-06 21:25       ` David Laight
2026-10-06 18:31 ` Paul E. McKenney
2026-10-06 18:31   ` Paul E. McKenney
  -- strict thread matches above, loose matches on Subject: below --
2026-10-05 12:05 Bradley Morgan
2026-10-05 12:05 ` Bradley Morgan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261006222546.6b667d1a@pumpkin \
    --to=david.laight.linux@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=brads@mainlining.org \
    --cc=chris@zankel.net \
    --cc=dalias@libc.org \
    --cc=glaubitz@physik.fu-berlin.de \
    --cc=guoren@kernel.org \
    --cc=jcmvbkbc@gmail.com \
    --cc=linux-csky@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-snps-arc@lists.infradead.org \
    --cc=paulmck@kernel.org \
    --cc=vgupta@kernel.org \
    --cc=ysato@users.sourceforge.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.