From: Andrea Parri <parri.andrea@gmail.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Akira Yokosawa <akiyks@gmail.com>,
Kernel development list <linux-kernel@vger.kernel.org>,
mingo@kernel.org, Will Deacon <will.deacon@arm.com>,
peterz@infradead.org, boqun.feng@gmail.com, npiggin@gmail.com,
dhowells@redhat.com, Jade Alglave <j.alglave@ucl.ac.uk>,
Luc Maranget <luc.maranget@inria.fr>,
Patrick Bellasi <patrick.bellasi@arm.com>
Subject: Re: [PATCH] tools/memory-model: remove rb-dep, smp_read_barrier_depends, and lockless_dereference
Date: Sat, 17 Feb 2018 16:14:13 +0100 [thread overview]
Message-ID: <20180217151413.GA3785@andrea> (raw)
In-Reply-To: <20180217032535.GA1125@andrea>
On Sat, Feb 17, 2018 at 04:25:35AM +0100, Andrea Parri wrote:
> On Fri, Feb 16, 2018 at 05:22:55PM -0500, Alan Stern wrote:
> > Since commit 76ebbe78f739 ("locking/barriers: Add implicit
> > smp_read_barrier_depends() to READ_ONCE()") was merged for the 4.15
> > kernel, it has not been necessary to use smp_read_barrier_depends().
> > Similarly, commit 59ecbbe7b31c ("locking/barriers: Kill
> > lockless_dereference()") removed lockless_dereference() from the
> > kernel.
> >
> > Since these primitives are no longer part of the kernel, they do not
> > belong in the Linux Kernel Memory Consistency Model. This patch
> > removes them, along with the internal rb-dep relation, and updates the
> > revelant documentation.
> >
> > Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
> >
> > ---
>
> [...]
>
>
> > Index: usb-4.x/tools/memory-model/linux-kernel.def
> > ===================================================================
> > --- usb-4.x/tools/memory-model.orig/linux-kernel.def
> > +++ usb-4.x/tools/memory-model/linux-kernel.def
> > @@ -13,14 +13,12 @@ WRITE_ONCE(X,V) { __store{once}(X,V); }
> > smp_store_release(X,V) { __store{release}(*X,V); }
> > smp_load_acquire(X) __load{acquire}(*X)
> > rcu_assign_pointer(X,V) { __store{release}(X,V); }
> > -lockless_dereference(X) __load{lderef}(X)
> > rcu_dereference(X) __load{deref}(X)
>
> ^^^ __load{once}
>
>
> >
> > // Fences
> > smp_mb() { __fence{mb} ; }
> > smp_rmb() { __fence{rmb} ; }
> > smp_wmb() { __fence{wmb} ; }
> > -smp_read_barrier_depends() { __fence{rb_dep}; }
> > smp_mb__before_atomic() { __fence{before-atomic} ; }
> > smp_mb__after_atomic() { __fence{after-atomic} ; }
> > smp_mb__after_spinlock() { __fence{after-spinlock} ; }
> > Index: usb-4.x/tools/memory-model/Documentation/cheatsheet.txt
> > ===================================================================
> > --- usb-4.x/tools/memory-model.orig/Documentation/cheatsheet.txt
> > +++ usb-4.x/tools/memory-model/Documentation/cheatsheet.txt
> > @@ -6,8 +6,7 @@
> > Store, e.g., WRITE_ONCE() Y Y
> > Load, e.g., READ_ONCE() Y Y Y
> > Unsuccessful RMW operation Y Y Y
> > -smp_read_barrier_depends() Y Y Y
> > -*_dereference() Y Y Y Y
> > +rcu_dereference() Y Y Y Y
> > Successful *_acquire() R Y Y Y Y Y Y
> > Successful *_release() C Y Y Y W Y
> > smp_rmb() Y R Y Y R
>
> Akira's observation about READ_ONCE extends to all (annotated) loads. In
> fact, it also applies to loads corresponding to unsuccessful RMW operations;
> consider, for example, the following variation of MP+onceassign+derefonce:
>
> C T
>
> {
> y=z;
> z=0;
> }
>
> P0(int *x, int **y)
> {
> WRITE_ONCE(*x, 1);
> smp_store_release(y, x);
> }
>
> P1(int **y, int *z)
> {
> int *r0;
> int r1;
>
> r0 = cmpxchg_relaxed(y, z, z);
> r1 = READ_ONCE(*r0);
> }
>
> exists (1:r0=x /\ 1:r1=0)
>
> The final state is allowed w/o the patch, and forbidden w/ the patch.
>
> This also reminds me of
>
> 5a8897cc7631fa544d079c443800f4420d1b173f
> ("locking/atomics/alpha: Add smp_read_barrier_depends() to _release()/_relaxed() atomics")
>
> (that we probably want to mention in the commit message).
Please also notice that 5a8897cc7631f only touched alpha's atomic.h:
I see no corresponding commit/change on {,cmp}xchg.h (where the "mb"
is currently conditionally executed).
Andrea
>
> Andrea
>
>
> >
> >
next prev parent reply other threads:[~2018-02-17 15:14 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-09 14:18 [PATCH RFC tools/lkmm] Miscellaneous fixes Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 01/10] tools/memory-model: Clarify the origin/scope of the tool name Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 02/10] MAINTAINERS: Add the Memory Consistency Model subsystem Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 03/10] MAINTAINERS: List file memory-barriers.txt within the LKMM entry Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 04/10] EXP litmus_tests: Add comments explaining tests' purposes Paul E. McKenney
2018-02-09 18:46 ` Alan Stern
2018-02-10 1:05 ` Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 05/10] README: Fix a couple of punctuation errors Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 06/10] EXP MAINTAINERS: Add the "LKMM" acronym Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 07/10] MAINTAINERS: Add Akira Yokosawa as an LKMM reviewer Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 08/10] EXP Remove understore from smp_mb__before_atomic() workings Paul E. McKenney
2018-02-15 22:30 ` Andrea Parri
2018-02-15 22:49 ` Paul E. McKenney
2018-02-15 23:19 ` Andrea Parri
2018-02-15 23:32 ` Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 09/10] EXP Remove underscore from smp_mb__after_atomic() workings Paul E. McKenney
2018-02-09 14:20 ` [PATCH RFC tip/lkmm 10/10] EXP Remove underscores from smp_mb__after_spinlock() workings Paul E. McKenney
2018-02-09 16:02 ` [PATCH RFC tools/lkmm] Miscellaneous fixes Akira Yokosawa
2018-02-09 16:06 ` [PATCH] tools/memory-model: Restore compat with herd7 7.47 ("-" -> "_") Akira Yokosawa
2018-02-09 23:46 ` [PATCH v2] tools/memory-model: Make " Akira Yokosawa
2018-02-10 1:07 ` Paul E. McKenney
2018-02-10 3:03 ` Akira Yokosawa
2018-02-11 11:51 ` Ingo Molnar
2018-02-13 1:38 ` Paul E. McKenney
2018-02-13 8:32 ` Ingo Molnar
2018-02-14 22:20 ` Akira Yokosawa
2018-02-14 22:52 ` Paul E. McKenney
2018-02-15 15:10 ` Alan Stern
2018-02-15 15:58 ` Trial of conflict resolution of Alan's patch Akira Yokosawa
2018-02-15 17:51 ` Alan Stern
2018-02-15 19:29 ` Paul E. McKenney
2018-02-15 21:51 ` Akira Yokosawa
2018-02-16 15:18 ` Alan Stern
2018-02-16 15:47 ` Andrea Parri
2018-02-16 16:53 ` Paul E. McKenney
2018-02-16 22:22 ` [PATCH] tools/memory-model: remove rb-dep, smp_read_barrier_depends, and lockless_dereference Alan Stern
2018-02-16 23:22 ` Akira Yokosawa
2018-02-17 0:39 ` Paul E. McKenney
2018-02-21 15:00 ` Alan Stern
2018-02-21 16:06 ` Paul E. McKenney
2018-02-21 16:51 ` Ingo Molnar
2018-02-21 17:53 ` Paul E. McKenney
2018-02-21 17:15 ` [PATCH] tools/memory-model: update: " Alan Stern
2018-02-21 17:58 ` Andrea Parri
2018-02-21 18:14 ` Paul E. McKenney
2018-02-21 18:00 ` Paul E. McKenney
2018-02-21 22:29 ` Akira Yokosawa
2018-02-24 3:22 ` Akira Yokosawa
2018-02-24 3:30 ` Paul E. McKenney
2018-02-24 14:36 ` Andrea Parri
2018-02-24 16:49 ` Alan Stern
2018-02-24 18:08 ` Paul E. McKenney
2018-02-24 22:47 ` Akira Yokosawa
2018-02-25 22:33 ` Paul E. McKenney
2018-02-17 3:25 ` [PATCH] tools/memory-model: " Andrea Parri
2018-02-17 15:14 ` Andrea Parri [this message]
2018-02-19 17:14 ` Alan Stern
2018-02-19 17:43 ` Peter Zijlstra
2018-02-19 17:44 ` Peter Zijlstra
2018-02-20 14:48 ` Paul E. McKenney
2018-02-20 15:17 ` Andrea Parri
2018-02-20 16:11 ` Paul E. McKenney
2018-02-19 19:41 ` Paul E. McKenney
2018-02-19 20:28 ` Peter Zijlstra
2018-02-20 14:49 ` Paul E. McKenney
2018-02-20 15:11 ` Alan Stern
2018-02-20 16:10 ` Paul E. McKenney
2018-02-20 9:33 ` Andrea Parri
2018-02-20 9:51 ` Peter Zijlstra
2018-02-20 15:38 ` Alan Stern
2018-02-15 22:05 ` Trial of conflict resolution of Alan's patch Andrea Parri
2018-02-15 22:41 ` Paul E. McKenney
2018-02-18 15:46 ` [PATCH v2] tools/memory-model: Make compat with herd7 7.47 ("-" -> "_") Akira Yokosawa
2018-02-20 14:57 ` Paul E. McKenney
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=20180217151413.GA3785@andrea \
--to=parri.andrea@gmail.com \
--cc=akiyks@gmail.com \
--cc=boqun.feng@gmail.com \
--cc=dhowells@redhat.com \
--cc=j.alglave@ucl.ac.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=luc.maranget@inria.fr \
--cc=mingo@kernel.org \
--cc=npiggin@gmail.com \
--cc=patrick.bellasi@arm.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=stern@rowland.harvard.edu \
--cc=will.deacon@arm.com \
/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.