From: Paul Mackerras <paulus@cs.anu.edu.au>
To: alan@cymru.net, jskov@cygnus.co.uk, cort@persephone.cs.nmt.edu,
linuxppc-dev@lists.linuxppc.org, Jes.Sorensen@cern.ch,
linux-apus@sunsite.auc.dk
Subject: Re: Synchronization [was Re: The Magic Show: kernel_map() disappearing]
Date: Fri, 15 Jan 1999 12:57:32 +1100 [thread overview]
Message-ID: <199901150157.MAA01789@tango.anu.edu.au> (raw)
In-Reply-To: <199901142052.UAA24588@snowcrash.cymru.net> (message from Alan Cox on Thu, 14 Jan 1999 20:52:51 +0000 (GMT))
Alan Cox <alan@cymru.net> wrote:
> > eieio: prevent CPU from reordering/collapsing reads/writes to memory.
> > (but otherwise run at full steam!)
>
> Thats what mb() does - its a memory-barrier hence the name - it imposes
> strong store ordering properties across it.
My understanding of the original mb() (and correct me if I'm wrong)
was that it basically said "an interrupt or another processor might
have changed memory, so don't keep values from memory cached in
registers". With wmb() on SMP, this seems to be extended to include
"make sure other cpus can see the values we just wrote". I don't know
exactly how rmb() differs from mb().
I just read in the Programming Environments Manual (the doc that
defines the PPC architecture) that eieio is supposed to provide
ordering for two sets of accesses:
- loads and stores to cache-inhibited, guarded addresses, and stores
to write-through cached addresses (i.e. I/O accesses),
- stores to cached, coherent addresses (i.e. addresses where the
corresponding PTE has WIM == 001).
The two sets are ordered separately. The eieio instruction doesn't
wait for previous accesses to complete, it just inserts a barrier into
the stream of memory accesses.
I guess eieio probably is strong enough for wmb(), since all ordinary
memory is marked coherent in PPC SMP.
The sync instruction is stronger than eieio, it says "wait until all
outstanding loads and stores (and instructions) have completed before
starting any new instructions". AFAICS, it subsumes eieio so there
would be no point in doing an eieio immediately after a sync.
I put a sync in for mb, rmb and wmb, which may be overkill. Certainly
I think the eieio that Cort added after the sync for these things is
unnecessary.
> x86 and most other processors dont have the notion of a store barrier and
> an i/o barrier beign different
On x86, i/o accesses are strongly ordered already. On PPC the eieio
instruction provides this sort of ordering (if you do it after each
access). So I think eieio is right for iobarrier_*. Whether eieio
would be sufficient for *mb(), or whether sync is needed, I'm not
sure. Certainly sync should be sufficient.
Paul.
[[ This message was sent via the linuxppc-dev mailing list. Replies are ]]
[[ not forced back to the list, so be sure to Cc linuxppc-dev if your ]]
[[ reply is of general interest. To unsubscribe from linuxppc-dev, send ]]
[[ the message 'unsubscribe' to linuxppc-dev-request@lists.linuxppc.org ]]
next prev parent reply other threads:[~1999-01-15 1:57 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <13980.23937.676502.388522@lassi.cygnus.co.uk>
[not found] ` <Pine.LNX.3.96.990113130000.3632F-100000@persephone.cs.nmt.edu>
1999-01-14 8:57 ` Synchronization [was Re: The Magic Show: kernel_map() disappearing] Jesper Skov
1999-01-14 9:55 ` Jes Sorensen
1999-01-14 16:25 ` luther sven
1999-01-14 13:27 ` Benjamin Herrenschmidt
1999-01-14 19:46 ` Douglas Godfrey
1999-01-14 20:52 ` Alan Cox
1999-01-14 21:53 ` Cort Dougan
1999-01-15 1:38 ` Alan Cox
1999-01-15 8:26 ` Jesper Skov
1999-01-15 1:57 ` Paul Mackerras [this message]
1999-01-15 8:40 ` Jes Sorensen
1999-01-15 16:10 ` Alan Cox
1999-01-15 19:28 ` Cort Dougan
1999-01-16 1:00 ` Douglas Godfrey
1999-01-16 1:09 ` Synchronization [was Re: The Magic Show: kernel_map() Alan Cox
1999-01-15 8:50 Synchronization [was Re: The Magic Show: kernel_map() disappearing] Benjamin Herrenschmidt
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=199901150157.MAA01789@tango.anu.edu.au \
--to=paulus@cs.anu.edu.au \
--cc=Jes.Sorensen@cern.ch \
--cc=Paul.Mackerras@cs.anu.edu.au \
--cc=alan@cymru.net \
--cc=cort@persephone.cs.nmt.edu \
--cc=jskov@cygnus.co.uk \
--cc=linux-apus@sunsite.auc.dk \
--cc=linuxppc-dev@lists.linuxppc.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 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).