lkml.org 
[lkml]   [2006]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Uses for memory barriers
On Sat, 9 Sep 2006, Oliver Neukum wrote:

> > But what _is_ the formal definition of a memory barrier? I've never seen
> > one that was complete and correct.
>
> I' d say "mb();" is "rmb();wmb();"
>
> and they work so that:
>
> CPU 0
>
> a = TRUE;
> wmb();
> b = TRUE;
>
> CPU 1
>
> if (b) {
> rmb();
> assert(a);
> }
>
> is correct. Possibly that is not a complete definition though.

It isn't. Paul has agreed that this assertion:

CPU 0 CPU 1
----- -----
while (x == 0) relax(); x = -1;
x = a; y = b;
mb(); mb();
b = 1; a = 1;
while (x < 0) relax();
assert(x==0 || y==0);

will not fail. I think this would not be true if either of the mb()
statements were replaced with {rmb(); wmb();}.

To put it another way, {rmb(); wmb();} guarantees that any preceding read
will complete before any following read and any preceding write will
complete before any following write. However it does not guarantee that
any preceding read will complete before any following write, whereas mb()
does guarantee that. (To whatever extent these statements make sense.)

Alan

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-09-09 04:29    [W:0.073 / U:6.512 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site