From: Jamie Lokier <jamie@shareable.org>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Ralf Baechle <ralf@linux-mips.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Paul Mackerras <paulus@samba.org>,
linux-arch@vger.kernel.org, Russell King <rmk@arm.linux.org.uk>,
Francois Romieu <romieu@fr.zoreil.com>
Subject: Re: SMP barriers semantics
Date: Wed, 17 Mar 2010 13:42:43 +0000 [thread overview]
Message-ID: <20100317134243.GA15235@shareable.org> (raw)
In-Reply-To: <1268792716.2335.170.camel@pasglop>
Benjamin Herrenschmidt wrote:
> Maybe we can agree on a set of relaxed accessors defined specifically
> with those semantics (more relaxed implies use of raw_*) :
>
> - order is guaranteed between MMIOs
> - no order is guaranteed between MMIOs and spinlocks
No order between MMIOs and spinlocks will be fun :-)
> - a read access is not guaranteed to be performed until the read value
> is actually consumed by the processor
How do you define 'consumed'? It's not obvious: see
read_barrier_depends() on Alpha, and elsewhere speculative read
optimisations (including by the compiler on IA64, in theory).
> Along with barriers along the line of (that's where we may want to
> discuss a bit I believe)
>
> - io_to_mem_rbarrier() : orders MMIO read vs. subsequent memory read
> - mem_to_io_wbarrier() : order memory write vs. subsequent MMIO write
> (includes spin_unlock ?)
> - io_to_mem_barrier() : order any MMIO s. subsequent memory accesses
> - mem_to_io_barrier() : order memory accesses vs any subsequent MMIO
> - flush_io_read(val) : takes value from MMIO read, enforce it's
> before completed further instructions are
> issued, acts as compiler&execution barrier.
>
> What do you guys think ? I think io_to_mem_rbarrier() and
> mem_to_io_wbarrier() cover most useful cases, except maybe the IO vs.
> locks.
I'm thinking the current scheme with "heavy" barriers that serialise
everything is better - because it's simple to understand. I think the
above set are likely to be accidentally misused, and even pass review
occasionally when they are wrong, even if it's just due to brain farts.
The "heavy" barrier names could change from rmb/mb/wmb to
io_rmb/io_mb/io_wmb or something.
Is there any real performance advantage expected from more
fine-grained MMIO barriers?
Another approach is a flags argument to a single macro:
barrier(BARRIER_MMIO_READ_BEFORE | BARRIER_MEM_READ_AFTER), etc.
Each arch would expand it to a barrier at least as strong as the one
requested. C++0x atomics are going down this route, I think.
-- Jamie
next prev parent reply other threads:[~2010-03-17 13:43 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-02 10:52 SMP barriers semantics Catalin Marinas
2010-03-03 0:55 ` Paul Mackerras
2010-03-03 12:03 ` Catalin Marinas
2010-03-12 12:31 ` Ralf Baechle
2010-03-12 20:38 ` Jamie Lokier
2010-03-17 2:25 ` Benjamin Herrenschmidt
2010-03-17 10:31 ` Catalin Marinas
2010-03-17 13:42 ` Jamie Lokier [this message]
2010-03-22 12:02 ` Nick Piggin
2010-03-23 3:42 ` Nick Piggin
2010-03-23 10:24 ` Catalin Marinas
2010-04-06 14:20 ` Nick Piggin
2010-04-06 15:43 ` Jamie Lokier
2010-04-06 16:04 ` Nick Piggin
2010-04-23 16:23 ` Catalin Marinas
2010-04-23 16:56 ` Jamie Lokier
2010-04-23 17:25 ` Catalin Marinas
2010-04-24 1:45 ` Jamie Lokier
2010-04-26 9:21 ` Catalin Marinas
2010-03-04 2:23 ` David Dillow
2010-03-04 9:33 ` Russell King
2010-03-04 9:48 ` Catalin Marinas
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=20100317134243.GA15235@shareable.org \
--to=jamie@shareable.org \
--cc=benh@kernel.crashing.org \
--cc=catalin.marinas@arm.com \
--cc=linux-arch@vger.kernel.org \
--cc=paulus@samba.org \
--cc=ralf@linux-mips.org \
--cc=rmk@arm.linux.org.uk \
--cc=romieu@fr.zoreil.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).