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. > 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... -- Marcel Moolenaar mar...@xcllnt.net _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"