Re: memory barrier question

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: David Howells
Date: Thursday, September 16, 2010 - 4:55 am

Miklos Szeredi <miklos@szeredi.hu> wrote:


I think so.  I'm not sure that you can assume that CPU1 does its two
'operations' in the same order.  You can guarantee that the read of x,
increment, and write of x will be done in an order, and that no one else will
see an intermediate state, but you can't guarantee that CPU2 will see x
changed before p is changed.

In Documentation/memory-barriers.txt, it says:

	The following also do _not_ imply memory barriers, and so may require
	explicit memory barriers under some circumstances
	(smp_mb__before_atomic_dec() for instance):

		atomic_add();
		atomic_sub();
		atomic_inc();
		atomic_dec();

so you need _two_ memory barriers, e.g.:

	CPU1:
		atomic_inc(&x);
		smp_mb__after_atomic_inc()
		p = &x;

	CPU2:
		q = p;
		smp_rmb();
		if (q)
			z = atomic_read(q);

Note that atomic_inc() may imply a suitable memory barrier on some arches, and
so has special variant barrier functions of its own.


If there's a lock+unlock between, then this counts as a full memory barrier:

	CPU1:
		atomic_inc(&x);
		spin_lock(&foo);
		spin_unlock(&foo);
		p = &x;

but you still need the matching smp_rmb() on CPU2.


That's fine, but you still need the matching smp_rmb() on CPU2.

David
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
memory barrier question, Miklos Szeredi, (Wed Sep 15, 7:36 am)
Re: memory barrier question, Rafael J. Wysocki, (Wed Sep 15, 12:12 pm)
Re: memory barrier question, David Howells, (Thu Sep 16, 4:55 am)
Re: memory barrier question, Miklos Szeredi, (Thu Sep 16, 6:42 am)
Re: memory barrier question, David Howells, (Thu Sep 16, 7:30 am)
Re: memory barrier question, Paul E. McKenney, (Thu Sep 16, 8:03 am)
Re: memory barrier question, Miklos Szeredi, (Thu Sep 16, 9:06 am)
Re: memory barrier question, Peter Zijlstra, (Thu Sep 16, 9:18 am)
Re: memory barrier question, Paul E. McKenney, (Thu Sep 16, 9:37 am)
Re: memory barrier question, Jamie Lokier, (Thu Sep 16, 9:50 am)
Re: memory barrier question, Miklos Szeredi, (Thu Sep 16, 9:56 am)
Re: memory barrier question, James Bottomley, (Thu Sep 16, 10:09 am)
Re: memory barrier question, Miklos Szeredi, (Thu Sep 16, 10:17 am)
Re: memory barrier question, James Bottomley, (Thu Sep 16, 10:40 am)
Re: memory barrier question, David Howells, (Thu Sep 16, 10:59 am)
Re: memory barrier question, Benjamin Herrenschmidt, (Fri Sep 17, 2:49 pm)
Re: memory barrier question, Paul E. McKenney, (Fri Sep 17, 4:12 pm)
Re: memory barrier question, Alan Cox, (Fri Sep 17, 6:12 pm)
Re: memory barrier question, Benjamin Herrenschmidt, (Sat Sep 18, 7:47 pm)
Re: memory barrier question, Paul E. McKenney, (Sun Sep 19, 8:26 am)
Re: memory barrier question, Miklos Szeredi, (Sun Sep 19, 1:15 pm)
Re: memory barrier question, Paul E. McKenney, (Sun Sep 19, 2:59 pm)
Re: memory barrier question, James Bottomley, (Sun Sep 19, 5:58 pm)
Re: memory barrier question, Paul E. McKenney, (Sun Sep 19, 6:29 pm)
Re: memory barrier question, Miklos Szeredi, (Mon Sep 20, 9:01 am)
Re: memory barrier question, Paul E. McKenney, (Mon Sep 20, 11:25 am)
Re: memory barrier question, Paul E. McKenney, (Mon Sep 20, 11:57 am)
Re: memory barrier question, Michael Cree, (Mon Sep 20, 1:26 pm)
Re: memory barrier question, Paul E. McKenney, (Mon Sep 20, 1:40 pm)
Re: memory barrier question, Paul E. McKenney, (Tue Sep 21, 7:59 am)
Re: memory barrier question, Paul E. McKenney, (Wed Sep 22, 11:41 am)