From: Catalin Marinas <catalin.marinas@arm.com>
To: Nick Piggin <npiggin@suse.de>
Cc: Jamie Lokier <jamie@shareable.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Ralf Baechle <ralf@linux-mips.org>,
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: Tue, 23 Mar 2010 10:24:07 +0000 [thread overview]
Message-ID: <1269339847.29545.42.camel@e102109-lin.cambridge.arm.com> (raw)
In-Reply-To: <20100322120203.GL17637@laptop>
On Mon, 2010-03-22 at 12:02 +0000, Nick Piggin wrote:
> On Wed, Mar 17, 2010 at 01:42:43PM +0000, Jamie Lokier wrote:
> > 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 :-)
>
> There isn't anyway, and things are pretty messed up in this area
> already. We have mmiowb. Some architectures do a bit of mmio vs
> lock synchronization. Eg. powerpc. But it doesn't do barriers on
> some other locks like bit spinlocks or mutexes or rwsems or
> semaphores blah blah.
>
> When this came up I grepped a couple of drivers and found possible
> problems straight away.
>
> So IMO, we need to take all these out of lock primitives and just
> increase awareness of it. Get rid of mmiowb. wmb() should be enough
> to keep mmio stores inside the store to drop any lock (by definition).
I think we have different scenarios for wmb and mmiowb (my
understanding). One is when the driver writes to a coherent DMA buffer
(usually uncached) and it than need to drain the write buffer before
informing the device to start the transfer. That's where wmb() would be
used (with normal uncached memory).
The mmiowb() may need to go beyond the CPU write-buffer level into the
PCI bus etc. but only for relative ordering of the I/O accesses. The
memory-barriers.txt suggests that mmiowb(). My understanding is that
mmiowb() drains any mmio buffers while wmb() drains normal memory
buffers.
> Actually I think having an io_acquire_barrier() / io_release_barrier()
> for the purpose of keeping ios inside locks is a good idea (paired
> inside the actual lock/unlock functions). This basically gives them
> a self-documenting property.
Is there any architecture where mmio accesses are speculated? Do we need
an io_acquire_barrier()? At least on ARM, device memory access is not
restartable by definition, which means that it cannot in general be
speculated. If that's true for other architectures as well, we wouldn't
need anything more than mmiowb() (but I may be wrong here).
Thanks.
--
Catalin
next prev parent reply other threads:[~2010-03-23 10:24 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
2010-03-22 12:02 ` Nick Piggin
2010-03-23 3:42 ` Nick Piggin
2010-03-23 10:24 ` Catalin Marinas [this message]
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=1269339847.29545.42.camel@e102109-lin.cambridge.arm.com \
--to=catalin.marinas@arm.com \
--cc=benh@kernel.crashing.org \
--cc=jamie@shareable.org \
--cc=linux-arch@vger.kernel.org \
--cc=npiggin@suse.de \
--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).