[ltt-dev] [PATCH 07/11] add uatomic_gcc.h, use it for default definitions
Paolo Bonzini
pbonzini at redhat.com
Mon Feb 15 03:05:32 EST 2010
On 02/14/2010 03:45 PM, Mathieu Desnoyers wrote:
>> > - if cmpxchg is present, use it to implement xchg and add_return;
>
> Not sure I understand this comment, and not sure it matches the patch.
> x86 has xchg() which is faster than a cmpxchg-based fallback, and you
> seem to leave the code as-is. Can you elaborate ?
Each per-architecture file can provide its own xchg and add_return which
are then used instead of the defaults. For example, x86 uses entirely
custom code, and PPC uses its own implementation of xchg (since it is
also much faster than cmpxchg on ll/sc machines).
Basically, in this case uatomic_gcc.h is using the approach of
uatomic_arch_sparc64.h.
>> > - if it is not present, implement all three using __sync_* builtins
>
> Starting from which gcc versions does these __sync_* builtins work ?
> (question applies for the builtin memory barrier too).
The builtins appeared in 4.2, but they were backported to 4.1 by some
vendors.
Note that on SPARC64 and S390 they were already needed to build the
library because the tests used them.urcu-bp-static.h. However the
clients of liburcu did not need the compiler to have __sync builtins.
After this patch, a new compiler is necessary on S390 and PPC to use the
following files:
urcu-bp-static.h:#include <urcu/uatomic_arch.h>
urcu-defer-static.h:#include <urcu/uatomic_arch.h>
urcu-pointer-static.h:#include <urcu/uatomic_arch.h>
urcu-pointer.h:#include <urcu/uatomic_arch.h>
urcu-qsbr-static.h:#include <urcu/uatomic_arch.h>
urcu-static.h:#include <urcu/uatomic_arch.h>
I'll test a patch to remove the inclusion from urcu-pointer.h since it
seems unnecessary to me.
After this, a client that is interested in using an older GCC can thus
use _LGPL_SOURCE if it finds a compiler that is not new enough. I can
also make this automatic if you prefer.
Paolo
More information about the lttng-dev
mailing list