Re: [PATCH] seqlock: Use WRITE_ONCE() when updating sequence
"Paul E. McKenney" <[email protected]>
| Newsgroups | org.kernel.vger.linux-toolchains,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <f91651fd-dda3-4fcd-9c12-dd12d46d39c9@paulmck-laptop> |
On Wed, Dec 18, 2024 at 08:56:07PM +0100, Florian Weimer wrote: > * Peter Zijlstra: > > > +linux-toolchains > > > > On Wed, Dec 18, 2024 at 08:59:47AM -0800, Paul E. McKenney wrote: > > > >> > Perhaps something like: (*(volatile unsigned int *)&s->sequence)++; ? > >> > I'd have to check what the compiler makes of that. > >> > > >> > /me mucks about with godbolt for a bit... > >> > > >> > GCC doesn't optimize that, but Clang does. > >> > > >> > I would still very much refrain from making this change until both > >> > compilers can generate sane code for it. > >> > >> Is GCC on track to do this, or do we need to encourage them? > > > > I have no clue; probably wise to offer encouragement. > > What do you consider sane code? Peter's "(*(volatile unsigned int *)&s->sequence)++;" qualifies as sane. > Clang's choice to generate an incl instruction (on x86-64 at least) is a > bit surprising. Curiously, the C11 abstract machine has a value-less > increment-in-place operation, so it's probably not in violation of the > volatile rules. (C doesn't specify x++ in terms of ++x and x += 1.) Very good! Should I do something like file a bug somewhere to help this along? Thanx, Paul