Thread (7 messages) 7 messages, 4 authors, 2016-01-28

Re: [PATCH v3] barriers: introduce smp_mb__release_acquire and update documentation

From: Will Deacon <hidden>
Date: 2016-01-28 15:35:06
Also in: lkml

On Wed, Jan 27, 2016 at 03:00:11PM -0800, Paul E. McKenney wrote:
On Wed, Jan 27, 2016 at 06:39:23PM +0000, Will Deacon wrote:
quoted
On Wed, Jan 27, 2016 at 07:25:51PM +0100, Peter Zijlstra wrote:
quoted
On Wed, Jan 27, 2016 at 06:22:04PM +0000, Will Deacon wrote:
quoted
As much as we'd like to live in a world where RELEASE -> ACQUIRE is
always cheaply ordered and can be used to construct UNLOCK -> LOCK
definitions with similar guarantees, the grim reality is that this isn't
even possible on x86 (thanks to Paul for bringing us crashing down to
Earth).

This patch handles the issue by introducing a new barrier macro,
smp_mb__after_release_acquire, that can be placed after an ACQUIRE that
either reads from a RELEASE or is in program-order after a RELEASE. The
barrier upgrades the RELEASE-ACQUIRE pair to a full memory barrier,
implying global transitivity. At the moment, it doesn't have any users,
so its existence serves mainly as a documentation aid and a potential
stepping stone to the reintroduction of smp_mb__after_unlock_lock() used
by RCU.

Documentation/memory-barriers.txt is updated to describe more clearly
the ACQUIRE and RELEASE ordering in this area and to show some examples
of the new barrier in action.
So the obvious question is: do we have a use-case?
We have a use-case for smp_mb__after_unlock_lock, so I think we should
either strengthen our locking guarantees so that smp_mb__after_unlock_lock
isn't needed or introduce smp_mb__after_release_acquire to close the gap.
As it stands, we've got an inconsistency (despite it being hidden inside
RCU).

The main advantage of this patch is a documentation aid, in my opinion
(hell, we talk about smp_mb__after_unlock_lock already when reasoning
about this stuff).
But wasn't there an x86 potential use case that required placing the
strengthening macro after the release and before the acquire?  Or is
this a case of old age striking again?
The proposal here doesn't order the release/acquire operations with each
other -- it just says that they combine with smp_mb__after_release_acquire()
to make a full barrier, so I don't think it should matter for the
intra-thread case, which is the one that x86 cares out iiuc.

Will
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help