Date: Thu, 24 May 2012 16:13:55 -0500 From: Nathan Whitehorn <nwhitehorn@freebsd.org> To: Marcel Moolenaar <marcel@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r235931 - head/sys/powerpc/include Message-ID: <4FBEA493.4020702@freebsd.org> In-Reply-To: <201205242045.q4OKjipb059398@svn.freebsd.org> References: <201205242045.q4OKjipb059398@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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. As the comment notes, isync only provides a barrier in conjunction with the atomic operations and atomic retry loop -- this is why there is a distinction between *mb() and __ATOMIC_*(). Moreover, __ATOMIC_ACQ() *must* be isync, not lwsync, on PPC64 without changes to the bus_space accessors. Using lwsync causes bus space operations to leak across mutex acquisition which causes the expected severe problems on at least my machine. 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 -Nathan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FBEA493.4020702>