From: David Mosberger <davidm@napali.hpl.hp.com>
To: Dave Engebretsen <engebret@vnet.ibm.com>
Cc: justincarlson@cmu.edu, Alan Cox <alan@lxorguk.ukuu.org.uk>,
linux-kernel@vger.kernel.org, anton@samba.org, davidm@hpl.hp.com,
ak@suse.de
Subject: Re: Memory Barrier Definitions
Date: Wed, 8 May 2002 10:07:08 -0700 [thread overview]
Message-ID: <15577.23356.338023.88947@napali.hpl.hp.com> (raw)
In-Reply-To: <3CD943CE.296717DF@vnet.ibm.com>
>>>>> On Wed, 08 May 2002 10:27:10 -0500, Dave Engebretsen <engebret@vnet.ibm.com> said:
Dave> I am curious what the definition of memory barriers is for
Dave> IA64, Sparc, and x86-64.
I'm not sure it's enough to look just at the memory barriers. The
barriers only make sense within the memory ordering model defined for
each architecture. For ia64, this is defined in Section 4.4.7 of
the System Architecture Guide, which is available at:
http://developer.intel.com/design/itanium/downloads/24531803s.htm
Dave> From what I can tell, sparc and x86-64 are like alpha and map
Dave> directly
Dave> to the existing mb, wmb, and rmb semantics, incluing ordering
Dave> between system memory and I/O space. Is that an accurate
Dave> assesment?
Dave> IA64 has both the mf and mf.a instructions, one for system
Dave> memory the other for I/O space.
The ia64 memory ordering model is quite orthogonal to the one that
Linux uses (which is based on the Alpha instructions): Linux
distinguishes between read and write memory barriers. ia64 uses an
acquire/release model instead. An acquire orders all *later* memory
accesses and a release orders all *earlier* accesses (regardless of
whether they are reads or writes). Another difference is that the
acquire/release semantics is attached to load/store instructions,
respectively. This means that in an ideal world, ia64 would rarely
need to use the memory barrier instruction.
Now, finding a way to abstract all the differences accross
architectures in a way that's easy to use and allows for optimal
implementation on each architecture may not be easy. This problem
also shows up with user-level thread libraries and I have had on and
off discussions about this with Hans Boehm, but neither of us has
really had time to work on it seriously. In truth, it is also the
case that for Itanium and Itanium 2, the cost of "mf" is small enough
that there hasn't been a huge need to get this exactly right. But
when reworking the memory ordering model of Linux, it might just as
well be taken into account.
Dave> What is required for ordering
Dave> of references between the spaces? That is not clear to me
Dave> looking at the ia64 headers.
Look at Table 4-15 in the above document (on page 2-70). I/O space is
simply a memory-mapped region that is mapped uncached. In the table,
the row "Sequential" refers to uncached memory. The quick summary is
that normal loads/stores to memory are not automatically ordered with
respect to accesses to uncached memory.
I'm also discussing some of these issues in my book
(http://www.lia64.org/book/) in the Device I/O chapter, but the
architecture manual mentioned above is of course the ultimate source
if you want all the gory details.
--david
next prev parent reply other threads:[~2002-05-08 17:07 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-05-07 19:07 Dave Engebretsen
2002-05-07 19:49 ` Alan Cox
2002-05-07 19:53 ` Dave Engebretsen
2002-05-07 20:27 ` Alan Cox
2002-05-07 21:23 ` Dave Engebretsen
2002-05-07 22:15 ` justincarlson
2002-05-08 2:49 ` Dave Engebretsen
2002-05-08 13:54 ` Justin Carlson
2002-05-08 15:27 ` Dave Engebretsen
2002-05-08 15:49 ` Andi Kleen
2002-05-08 17:07 ` David Mosberger [this message]
2002-05-09 7:36 ` Rusty Russell
2002-05-09 8:01 ` Keith Owens
2002-05-09 15:00 ` David Mosberger
2002-05-13 3:26 ` Rusty Russell
2002-05-13 16:36 ` David Mosberger
2002-05-13 16:50 ` Linus Torvalds
2002-05-13 17:53 ` David Mosberger
2002-05-13 23:28 ` Rusty Russell
2002-05-07 22:57 ` Anton Blanchard
2002-05-13 18:16 ` Jesse Barnes
2002-05-09 11:33 Manfred Spraul
2002-05-09 19:38 ` Dave Engebretsen
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=15577.23356.338023.88947@napali.hpl.hp.com \
--to=davidm@napali.hpl.hp.com \
--cc=ak@suse.de \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=anton@samba.org \
--cc=davidm@hpl.hp.com \
--cc=engebret@vnet.ibm.com \
--cc=justincarlson@cmu.edu \
--cc=linux-kernel@vger.kernel.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
all inboxes | Powered by JetHome®