[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190523112013.GA14035@andrea>
Date: Thu, 23 May 2019 13:20:13 +0200
From: Andrea Parri <andrea.parri@...rulasolutions.com>
To: Mark Rutland <mark.rutland@....com>
Cc: linux-kernel@...r.kernel.org, peterz@...radead.org,
will.deacon@....com, aou@...s.berkeley.edu, arnd@...db.de,
bp@...en8.de, catalin.marinas@....com, davem@...emloft.net,
fenghua.yu@...el.com, heiko.carstens@...ibm.com,
herbert@...dor.apana.org.au, ink@...assic.park.msu.ru,
jhogan@...nel.org, linux@...linux.org.uk, mattst88@...il.com,
mingo@...nel.org, mpe@...erman.id.au, palmer@...ive.com,
paul.burton@...s.com, paulus@...ba.org, ralf@...ux-mips.org,
rth@...ddle.net, stable@...r.kernel.org, tglx@...utronix.de,
tony.luck@...el.com, vgupta@...opsys.com
Subject: Re: [PATCH 00/18] locking/atomic: atomic64 type cleanup
> > While reading the series, I realized that the following expression:
> >
> > atomic64_t v;
> > ...
> > typeof(v.counter) my_val = atomic64_set(&v, VAL);
> >
> > is a valid expression on some architectures (in part., on architectures
> > which #define atomic64_set() to WRITE_ONCE()) but is invalid on others.
> > (This is due to the fact that WRITE_ONCE() can be used as an rvalue in
> > the above assignment; TBH, I ignore the reasons for having such rvalue?)
> >
> > IIUC, similar considerations hold for atomic_set().
> >
> > The question is whether this is a known/"expected" inconsistency in the
> > implementation of atomic64_set() or if this would also need to be fixed
> > /addressed (say in a different patchset)?
>
> In either case, I don't think the intent is that they should be used that way,
> and from a quick scan, I can only fine a single relevant instance today:
>
> [mark@...rids:~/src/linux]% git grep '\(return\|=\)\s\+atomic\(64\)\?_set'
> include/linux/vmw_vmci_defs.h: return atomic_set((atomic_t *)var, (u32)new_val);
> include/linux/vmw_vmci_defs.h: return atomic64_set(var, new_val);
>
>
> [mark@...rids:~/src/linux]% git grep '=\s+atomic_set' | wc -l
> 0
> [mark@...rids:~/src/linux]% git grep '=\s+atomic64_set' | wc -l
> 0
>
> Any architectures implementing arch_atomic_* will have both of these functions
> returning void. Currently that's x86 and arm64, but (time permitting) I intend
> to migrate other architectures, so I guess we'll have to fix the above up as
> required.
>
> I think it's best to avoid the construct above.
Thank you for the clarification, Mark. I agree with you that it'd be
better to avoid such constructs. (FWIW, it is not currently possible
to use them in litmus tests for the LKMM...)
Thanks,
Andrea
Powered by blists - more mailing lists