About the memory barrier in BSD libc

Fengwei yin yfw.bsd at gmail.com
Mon Apr 23 11:44:35 UTC 2012


On Mon, Apr 23, 2012 at 7:38 PM, Slawa Olhovchenkov <slw at zxy.spb.ru> wrote:
> On Mon, Apr 23, 2012 at 07:26:54PM +0800, Fengwei yin wrote:
>
>> On Mon, Apr 23, 2012 at 5:40 PM, Slawa Olhovchenkov <slw at zxy.spb.ru> wrote:
>> > On Mon, Apr 23, 2012 at 05:32:24PM +0800, Fengwei yin wrote:
>> >
>> >> On Mon, Apr 23, 2012 at 4:41 PM, Slawa Olhovchenkov <slw at zxy.spb.ru> wrote:
>> >> > On Mon, Apr 23, 2012 at 02:56:03PM +0800, Fengwei yin wrote:
>> >> >
>> >> >> Hi list,
>> >> >> If this is not correct question on the list, please let me know and
>> >> >> sorry for noise.
>> >> >>
>> >> >> I have a question regarding the BSD libc for SMP arch. I didn't see
>> >> >> memory barrier used in libc.
>> >> >> How can we make sure it's safe on SMP arch?
>> >> >
>> >> > /usr/include/machine/atomic.h:
>> >> >
>> >> > #define mb()    __asm __volatile("lock; addl $0,(%%esp)" : : : "memory")
>> >> > #define wmb()   __asm __volatile("lock; addl $0,(%%esp)" : : : "memory")
>> >> > #define rmb()   __asm __volatile("lock; addl $0,(%%esp)" : : : "memory")
>> >> >
>> >>
>> >> Thanks for the information. But it looks no body use it in libc.
>> >
>> > I think no body in libc need memory barrier: libc don't work with
>> > peripheral, for atomic opertions used different macros.
>>
>> If we check the usage of __sinit(), it is a typical singleton pattern which
>> needs memory barrier to make sure no potential SMP issue.
>>
>> Or did I miss something here?
>
> What architecture with cache incoherency and FreeBSD support?

I suppose it's not related with cache inchoherency (I could be wrong).
It's related
with reorder of instruction by CPU.

Here is the link talking about why need memory barrier for singleton:
http://www.oaklib.org/docs/oak/singleton.html

x86 has strict memory model and may not suffer this kind of issue. But
ARM need to
take care of it IMHO.

Regards
Yin, Fengwei


More information about the freebsd-threads mailing list