Re: Uses for memory barriers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux