Skip site navigation (1)Skip section navigation (2)
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>