From: Will Deacon <will.deacon@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Boqun Feng <boqun.feng@gmail.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
Ingo Molnar <mingo@kernel.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
Michael Ellerman <mpe@ellerman.id.au>,
Thomas Gleixner <tglx@linutronix.de>,
Waiman Long <waiman.long@hp.com>
Subject: Re: [RFC 3/5] powerpc: atomic: implement atomic{,64}_{add,sub}_return_* variants
Date: Mon, 14 Sep 2015 16:38:48 +0100 [thread overview]
Message-ID: <20150914153848.GE23878@arm.com> (raw)
In-Reply-To: <20150914121156.GZ18673@twins.programming.kicks-ass.net>
On Mon, Sep 14, 2015 at 01:11:56PM +0100, Peter Zijlstra wrote:
> On Mon, Sep 14, 2015 at 02:01:53PM +0200, Peter Zijlstra wrote:
> > The scenario is:
> >
> > CPU0 CPU1
> >
> > unlock(x)
> > smp_store_release(&x->lock, 0);
> >
> > unlock(y)
> > smp_store_release(&next->lock, 1); /* next == &y */
> >
> > lock(y)
> > while (!(smp_load_acquire(&y->lock))
> > cpu_relax();
> >
> >
> > Where the lock does _NOT_ issue a store to acquire the lock at all. Now
> > I don't think any of our current primitives manage this, so we should be
> > good, but it might just be possible.
>
> So with a bit more through this seems fundamentally impossible, you
> always needs some stores in a lock() implementation, the above for
> instance needs to queue itself, otherwise CPU0 will not be able to find
> it etc..
Which brings us back round to separating LOCK/UNLOCK from ACQUIRE/RELEASE.
If we say that UNLOCK(foo) -> LOCK(bar) is ordered but RELEASE(baz) ->
ACQUIRE(boz) is only ordered by smp_mb__release_acquire(), then I think
we're in a position where we can at least build arbitrary locks portably
out of ACQUIRE/RELEASE operations, even though I don't see any users of
that macro in the imminent future.
I'll have a crack at some documentation.
Will
next prev parent reply other threads:[~2015-09-14 15:38 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-28 2:48 [RFC 0/5] atomics: powerpc: implement relaxed/acquire/release variants of some atomics Boqun Feng
2015-08-28 2:48 ` [RFC 1/5] atomics: add test for atomic operations with _relaxed variants Boqun Feng
2015-08-28 2:48 ` [RFC 2/5] atomics: introduce arch_atomic_op_{acquire, release, fence} helpers Boqun Feng
2015-08-28 2:48 ` [RFC 2/5] atomics: introduce arch_atomic_op_{acquire,release,fence} helpers Boqun Feng
2015-08-28 11:36 ` Peter Zijlstra
2015-08-28 11:50 ` Boqun Feng
2015-08-28 2:48 ` [RFC 3/5] powerpc: atomic: implement atomic{, 64}_{add, sub}_return_* variants Boqun Feng
2015-08-28 2:48 ` [RFC 3/5] powerpc: atomic: implement atomic{,64}_{add,sub}_return_* variants Boqun Feng
2015-08-28 10:48 ` Peter Zijlstra
2015-08-28 12:06 ` Boqun Feng
2015-08-28 14:16 ` Boqun Feng
2015-08-28 15:39 ` Peter Zijlstra
2015-08-28 16:59 ` Boqun Feng
2015-09-01 19:00 ` Will Deacon
2015-09-01 21:45 ` Paul E. McKenney
2015-09-02 9:59 ` Will Deacon
2015-09-02 10:49 ` Paul E. McKenney
2015-09-02 15:23 ` Pranith Kumar
2015-09-02 15:36 ` [RFC 3/5] powerpc: atomic: implement atomic{, 64}_{add, sub}_return_* variants Pranith Kumar
2015-09-02 15:36 ` [RFC 3/5] powerpc: atomic: implement atomic{,64}_{add,sub}_return_* variants Pranith Kumar
2015-09-03 10:31 ` Will Deacon
2015-09-11 12:45 ` Will Deacon
2015-09-11 17:09 ` Paul E. McKenney
2015-09-14 11:35 ` Peter Zijlstra
2015-09-14 12:01 ` Peter Zijlstra
2015-09-14 12:11 ` Peter Zijlstra
2015-09-14 15:38 ` Will Deacon [this message]
2015-09-14 16:26 ` Paul E. McKenney
2015-08-28 2:48 ` [RFC 4/5] powerpc: atomic: implement xchg_* and atomic{, 64}_xchg_* variants Boqun Feng
2015-08-28 2:48 ` [RFC 4/5] powerpc: atomic: implement xchg_* and atomic{,64}_xchg_* variants Boqun Feng
2015-08-28 2:48 ` [RFC 5/5] powerpc: atomic: implement cmpxchg{, 64}_* and atomic{, 64}_cmpxchg_* variants Boqun Feng
2015-08-28 2:48 ` [RFC 5/5] powerpc: atomic: implement cmpxchg{,64}_* and atomic{,64}_cmpxchg_* variants Boqun Feng
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=20150914153848.GE23878@arm.com \
--to=will.deacon@arm.com \
--cc=benh@kernel.crashing.org \
--cc=boqun.feng@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mingo@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=paulmck@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=waiman.long@hp.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.