From: Will Deacon <will.deacon@arm.com>
To: "Maciej W. Rozycki" <macro@imgtec.com>
Cc: "David Daney" <ddaney@caviumnetworks.com>,
"Måns Rullgård" <mans@mansr.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Ralf Baechle" <ralf@linux-mips.org>,
linux-kernel@vger.kernel.org,
"Paul McKenney" <paulmck@linux.vnet.ibm.com>,
torvalds@linux-foundation.org, boqun.feng@gmail.com
Subject: Re: [RFC][PATCH] mips: Fix arch_spin_unlock()
Date: Wed, 27 Jan 2016 11:43:48 +0000 [thread overview]
Message-ID: <20160127114348.GF2390@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1601200131240.5958@tp.orcam.me.uk>
Hi Maciej,
Thanks for digging all this up.
On Wed, Jan 27, 2016 at 09:57:24AM +0000, Maciej W. Rozycki wrote:
> On Thu, 12 Nov 2015, David Daney wrote:
>
> > > > Certainly we can load up the code with "SYNC" all over the place, but
> > > > it will kill performance on SMP systems. So, my vote would be to make
> > > > it as light weight as possible, but no lighter. That will mean
> > > > inventing the proper barrier primitives.
> > >
> > > It seems to me that the proper barrier here is a "SYNC 18" aka
> > > SYNC_RELEASE instruction, at least on CPUs that implement that variant.
>
> For the record, we've had "cooked" aliases in the toolchain for a short
> while now -- since Sep 2010 or binutils 2.21 -- so for readability you can
> actually use `sync_release' in your source code rather than obscure `sync
> 18' (of course you could define a macro instead, but there's no need now),
> and disassembly will show the "cooked" mnemonic too.
>
> Although Documentation/Changes still lists binutils 2.12 as the minimum,
> so perhaps using macros is indeed the way to go now, at least for the time
> being.
>
> > Yes, unfortunately very few CPUs implement that. It is an instruction that
> > MIPS invented only recently, so older CPUs need a different solution.
>
> Hmm, it looks to me we might actually be safe, although as often the
> situation seems more complicated than it had to be.
[... trim ISA archaeology ...]
> Overall I think it should be safe after all to use SYNC_RELEASE and other
> modern lightweight barriers uncondtionally under the assumption that
> architecture was meant to remain backward compatible. Even though it
> might be possible someone would implement unusual semantics for the then
> undefined `stype' values, I highly doubt it as it would be extra effort
> and hardware logic space for no gain. We could try and reach architecture
> overseers to double-check whether the `stype' encodings, somewhat
> irregularly distributed, were indeed defined in a manner so as not to
> clash with values implementers chose to use before rev. 2.61 of the
> architecture specification.
Do you know whether a SYNC 18 (RELEASE) followed in program order by a
SYNC 17 (ACQUIRE) creates a full barrier (i.e. something like SYNC 16)?
If not, you may need to implement smp_mb__after_unlock_lock for RCU
to ensure globally transitive unlock->lock ordering should you decide
to relax your locking barriers.
Will
next prev parent reply other threads:[~2016-01-27 11:43 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-12 12:31 [RFC][PATCH] mips: Fix arch_spin_unlock() Peter Zijlstra
2015-11-12 12:35 ` Peter Zijlstra
2015-11-12 13:31 ` Måns Rullgård
2015-11-12 14:32 ` Paul E. McKenney
2015-11-12 14:50 ` Måns Rullgård
2015-11-12 14:59 ` Paul E. McKenney
2015-11-12 17:46 ` David Daney
2015-11-12 18:00 ` Peter Zijlstra
2015-11-12 18:13 ` Måns Rullgård
2015-11-12 18:17 ` David Daney
2016-01-27 9:57 ` Maciej W. Rozycki
2016-01-27 11:43 ` Will Deacon [this message]
2016-01-27 12:41 ` Maciej W. Rozycki
2016-01-28 1:11 ` Boqun Feng
2016-01-27 14:54 ` Peter Zijlstra
2016-01-27 15:21 ` Will Deacon
2016-01-27 23:38 ` Paul E. McKenney
2016-01-28 9:57 ` Will Deacon
2016-01-28 22:31 ` Paul E. McKenney
2016-01-29 9:59 ` Will Deacon
2016-01-29 10:22 ` Paul E. McKenney
2016-02-01 13:56 ` Will Deacon
2016-02-02 3:54 ` Paul E. McKenney
2016-02-02 5:19 ` Boqun Feng
2016-02-02 6:44 ` Paul E. McKenney
2016-02-02 8:07 ` Linus Torvalds
2016-02-02 8:19 ` Linus Torvalds
2016-02-02 9:34 ` Boqun Feng
2016-02-02 17:30 ` Linus Torvalds
2016-02-02 17:51 ` Will Deacon
2016-02-02 18:06 ` Linus Torvalds
2016-02-02 19:30 ` Will Deacon
2016-02-02 19:55 ` Linus Torvalds
2016-02-03 19:13 ` Will Deacon
2016-02-03 8:33 ` Ingo Molnar
2016-02-03 13:32 ` Will Deacon
2016-02-03 19:03 ` Will Deacon
2016-02-09 11:23 ` Ingo Molnar
2016-02-09 11:42 ` Will Deacon
2016-02-02 12:02 ` Paul E. McKenney
2016-02-02 17:56 ` Linus Torvalds
2016-02-02 22:30 ` Paul E. McKenney
2016-02-02 14:49 ` Ralf Baechle
2016-02-02 14:54 ` Måns Rullgård
2016-02-02 14:58 ` Ralf Baechle
2016-02-02 15:51 ` Måns Rullgård
2016-02-02 17:23 ` Peter Zijlstra
2016-02-02 22:38 ` Paul E. McKenney
2016-02-02 11:45 ` Will Deacon
2016-02-02 12:12 ` Boqun Feng
2016-02-02 12:20 ` Will Deacon
2016-02-02 13:18 ` Boqun Feng
2016-02-02 17:12 ` Paul E. McKenney
2016-02-02 17:37 ` Will Deacon
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=20160127114348.GF2390@arm.com \
--to=will.deacon@arm.com \
--cc=boqun.feng@gmail.com \
--cc=ddaney@caviumnetworks.com \
--cc=linux-kernel@vger.kernel.org \
--cc=macro@imgtec.com \
--cc=mans@mansr.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=ralf@linux-mips.org \
--cc=torvalds@linux-foundation.org \
/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.