Date: Tue, 24 Apr 2012 21:13:02 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: Martin Simmons <martin@lispworks.com> Cc: jack.ren@intel.com, freebsd-threads@freebsd.org Subject: Re: About the memory barrier in BSD libc Message-ID: <20120424181302.GB2358@deviant.kiev.zoral.com.ua> In-Reply-To: <201204241800.q3OI0X89007384@higson.cam.lispworks.com> References: <20120423084120.GD76983@zxy.spb.ru> <201204241343.q3ODhe2C032683@higson.cam.lispworks.com> <20120424140348.GY2358@deviant.kiev.zoral.com.ua> <201204241110.14017.jhb@freebsd.org> <20120424165842.GZ2358@deviant.kiev.zoral.com.ua> <201204241800.q3OI0X89007384@higson.cam.lispworks.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--6lA9ewhm9nShhcj2 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Apr 24, 2012 at 07:00:33PM +0100, Martin Simmons wrote: > >>>>> On Tue, 24 Apr 2012 19:58:42 +0300, Konstantin Belousov said: > >=20 > > + > > + /* > > + * Lock the spinlock used to protect __sglue list walk in > > + * __sfp(). The __sfp() uses fp->_flags =3D=3D 0 test as an > > + * indication of the unused FILE. > > + * > > + * Taking the lock prevents possible compiler or processor > > + * reordering of the writes performed before the final _flags > > + * cleanup, making sure that we are done with the FILE before > > + * it is considered available. > > + */ > > + STDIO_THREAD_LOCK(); > > fp->_flags =3D 0; /* Release this FILE for reuse. */ > > + STDIO_THREAD_UNLOCK(); > > FUNLOCKFILE(fp); > > return (r); >=20 > Is that assumption about reordering correct? I.e. is FreeBSD's spinlock a > two-way barrier? >=20 > It isn't unusual for the locking primitive to be a one-way barrier, i.e. = (from > Linux kernel memory-barriers.txt) "Memory operations that occur before a = LOCK > operation may appear to happen after it completes." See also acq and rel= in > atomic(9). Taking the lock prevents the __sfp from iterating the list until the spinlock is released. Since release makes sure that all previous memory operations become visible, the acquire in the spinlock lock provides the neccesary guarentee. --6lA9ewhm9nShhcj2 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (FreeBSD) iEYEARECAAYFAk+W7S4ACgkQC3+MBN1Mb4j2XwCfUwYZ5frhFeuNuQblrpS/xCMH lKAAoMVOuTnHmMBWsL/5YaWIBx+Me3xq =YN7b -----END PGP SIGNATURE----- --6lA9ewhm9nShhcj2--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120424181302.GB2358>