On Fri, Jun 04, 2021 at 02:27:49PM -0700, Linus Torvalds wrote: > On Fri, Jun 4, 2021 at 1:56 PM Paul E. McKenney <paulmck@xxxxxxxxxx> wrote: > > > > The usual way to prevent it is to use WRITE_ONCE(). > > The very *documentation example* for "volatile_if()" uses that WRITE_ONCE(). > > IOW, the patch that started this discussion has this comment in it: > > +/** > + * volatile_if() - Provide a control-dependency > + * > + * volatile_if(READ_ONCE(A)) > + * WRITE_ONCE(B, 1); > + * > + * will ensure that the STORE to B happens after the LOAD of A. We do actually have uses what use a 'regular' store, and not a WRITE_ONCE(). And I think for those the added barrier() might make a difference. At the very least the perf ring-buffer case uses memcpy(). On my part I'm deeply distrusting some of the C language committee proposals I've seen regarding this stuff, and I'm maybe worrying too much, but I'd rather not have to debug anything like this when they do manage to make it go bad. On top of that, I think having the construct is good for documenting intent and possibly some of the concurrency analyzers can make use of it.