On 05/24/12 17:07, Marcel Moolenaar wrote:

On May 24, 2012, at 2:13 PM, Nathan Whitehorn wrote:

On 05/24/12 15:45, Marcel Moolenaar wrote:
Author: marcel
Date: Thu May 24 20:45:44 2012
New Revision: 235931
URL: http://svn.freebsd.org/changeset/base/235931

Log:
   Fix the memory barriers for CPUs that do not like lwsync and wedge or cause
   exceptions early enough during boot that the kernel will do ithe same.
   Use lwsync only when compiling for LP64 and revert to the more proven isync
   when compiling for ILP32. Note that in the end (i.e. between revision 222198
   and this change) ILP32 changed from using sync to using isync. As per Nathan
   the isync is needed to make sure I/O accesses are properly serialized with
   locks and isync tends to be more effecient than sync.


This badly breaks the synchronization primitives. The functions 
mb()/wmb()/rmb() need to be sync or lwsync on ILP32, not isync.

I guess I misinterpreted your email in which you stated that isync is better.

It's just in this one single case. Otherwise, it's still faster but doesn't work :)

Summary:
1. *mb() must be lwsync or sync on all machines, except for wmb() which could 
be eieio
2. __ATOMIC_ACQ() must be isync (though could be reduced to lwsync with 
bus_space changes)
3. __ATOMIC_REL() must be lwsync or sync

This is absolutely not what I concluded from our discussions. I have no idea
how we could end up so out of sync...


Thanks for the quick change. No idea how we got out of sync. I find all of this synchronization stuff a little mind-bending, so sorry for any miscommunication. __ATOMIC_ACQ() needed to also be isync on ppc64, so I've fixed that up. Things should be good now.
-Nathan
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to