Date: Tue, 18 Sep 2012 12:15:55 +0200 From: Dimitry Andric <dim@FreeBSD.org> To: attilio@FreeBSD.org Cc: Davide Italiano <davide@freebsd.org>, src-committers@freebsd.org, John Baldwin <jhb@freebsd.org>, Jeff Roberson <jeff@freebsd.org>, svn-src-projects@freebsd.org, Konstantin Belousov <kostikbel@gmail.com> Subject: Re: svn commit: r238907 - projects/calloutng/sys/kern Message-ID: <505849DB.3090704@FreeBSD.org> In-Reply-To: <CAJ-FndCRg0UCThFkatp=tw7rUWWCvhsApLE=iztLpxpGBC1F9w@mail.gmail.com> References: <201207301350.q6UDobCI099069@svn.freebsd.org> <CAJ-FndBj8tpC_BJXs_RH8sG2TBG8yA=Lxu3-GTVT9Ap_zOCuVQ@mail.gmail.com> <CAJ-FndDnO7wjnWPV0tTu%2BUGHjsxa3YDarMxmyei3ZmjLAFvRkQ@mail.gmail.com> <201207301732.33474.jhb@freebsd.org> <CAJ-FndD5EO12xsWOAe6u0EvX00q33wxO4OivnGjzj0=T2Oe8uA@mail.gmail.com> <CAJ-FndCRg0UCThFkatp=tw7rUWWCvhsApLE=iztLpxpGBC1F9w@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2012-09-18 02:13, Attilio Rao wrote: > On Thu, Aug 2, 2012 at 9:56 PM, Attilio Rao <attilio@freebsd.org> wrote: >> On 7/30/12, John Baldwin <jhb@freebsd.org> wrote: ... >> While here, did you consider also: >> - Abstracting compiler_memory_barrier() into a MI, compiler dependent function? > > So what do you think about this patch? (Please double-check the GIT log). ... > diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h > index 8224672..fc6a75f 100644 > --- a/sys/sys/cdefs.h > +++ b/sys/sys/cdefs.h > @@ -114,6 +114,13 @@ > #endif > > /* > + * Compiler memory barriers, specific to gcc and clang. > + */ > +#if defined(__GNUC__) > +#define __compiler_membar() __asm __volatile(" " : : : "memory") > +#endif > + > +/* > * The __CONCAT macro is used to concatenate parts of symbol names, e.g. > * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo. > * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI Please use gcc's __sync_synchronize() builtin[1] instead, which is specifically for this purpose. Clang also supports it. The builtin will emit actual memory barrier instructions, if the target architecture supports it, otherwise it will emit the same asm statement you show above. See contrib/gcc/builtins.c, around line 5584, function expand_builtin_synchronize(). -Dimitry [1]: <http://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html#index-g_t_005f_005fsync_005fsynchronize-2843>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?505849DB.3090704>