← Back to team overview

maria-developers team mailing list archive

Re: bzr commit into MariaDB 5.1, with Maria 1.5:maria branch (knielsen:2703)

 

Hi Serg,

We discussed something like this on IRC some time ago. What do you think of
this change? It keeps the use of GCC stuff for maria/my_atomic disabled, while
still letting other parts (ie. XtraDB) check for GCC intrinsics availability.

 - Kristian.

knielsen@xxxxxxxxxxxxxxx writes:

> #At lp:maria
>
>  2703 knielsen@xxxxxxxxxxxxxxx	2009-06-10
>       Fix XtraDB to build with atomic operations, for good performance.
>       
>       The root of the problem is that ./configure mixed together two different things. One is the
>       availability of GCC atomic operation intrinsics. The other is the selection of which
>       primitives to use for my_atomic implementation.
>       
>       Then at some point a hack was made to not use GCC intrinsics in my_atomic to work around
>       some test failures. But because the two things are mixed in ./configure, this as a side
>       effect also makes GCC intrinsics unavailable for XtraDB.
>       
>       Fixed by splitting this in two in configure, so that we have HAVE_GCC_ATOMIC_BUILTINS for
>       GCC intrinsics availability and MY_ATOMIC_MODE_GCC_BUILTINS for use in my_atomic.
>       modified:
>         configure.in
>         include/atomic/nolock.h
>
> === modified file 'configure.in'
> --- a/configure.in	2009-04-23 13:06:16 +0000
> +++ b/configure.in	2009-06-10 09:13:53 +0000
> @@ -1726,6 +1726,30 @@ then
>    fi
>  fi
>  
> +AC_CACHE_CHECK([whether the compiler provides atomic builtins],
> +	       [mysql_cv_gcc_atomic_builtins], [AC_TRY_RUN([
> +  int main()
> +  {
> +    int foo= -10; int bar= 10;
> +    if (!__sync_fetch_and_add(&foo, bar) || foo)
> +      return -1;
> +    bar= __sync_lock_test_and_set(&foo, bar);
> +    if (bar || foo != 10)
> +      return -1;
> +    bar= __sync_val_compare_and_swap(&bar, foo, 15);
> +    if (bar)
> +      return -1;
> +    return 0;
> +  }
> +], [mysql_cv_gcc_atomic_builtins=yes],
> +   [mysql_cv_gcc_atomic_builtins=no],
> +   [mysql_cv_gcc_atomic_builtins=no])])
> +
> +if test "x$mysql_cv_gcc_atomic_builtins" = xyes; then
> +  AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS, 1,
> +	    [Define to 1 if compiler provides atomic builtins.])
> +fi
> +
>  AC_ARG_WITH([atomic-ops],
>  	    AC_HELP_STRING([--with-atomic-ops=rwlocks|smp|up],
>  	    [Implement atomic operations using pthread rwlocks or atomic CPU
> @@ -1739,28 +1763,9 @@ case "$with_atomic_ops" in
>                    [Use pthread rwlocks for atomic ops]) ;;
>    "smp") ;;
>    "")
> -    AC_CACHE_CHECK([whether the compiler provides atomic builtins],
> -                   [mysql_cv_gcc_atomic_builtins], [AC_TRY_RUN([
> -      int main()
> -      {
> -        int foo= -10; int bar= 10;
> -        if (!__sync_fetch_and_add(&foo, bar) || foo)
> -          return -1;
> -        bar= __sync_lock_test_and_set(&foo, bar);
> -        if (bar || foo != 10)
> -          return -1;
> -        bar= __sync_val_compare_and_swap(&bar, foo, 15);
> -        if (bar)
> -          return -1;
> -        return 0;
> -      }
> -    ], [mysql_cv_gcc_atomic_builtins=yes_but_disabled],
> -       [mysql_cv_gcc_atomic_builtins=no],
> -       [mysql_cv_gcc_atomic_builtins=no])])
> -
> -    if test "x$mysql_cv_gcc_atomic_builtins" = xyes; then
> -      AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS, 1,
> -                [Define to 1 if compiler provides atomic builtins.])
> +    if test "x$mysql_cv_gcc_atomic_builtins" = xyes_but_disabled; then
> +      AC_DEFINE([MY_ATOMIC_MODE_GCC_BUILTINS], [1],
> +                [Use GCC atomic builtins for atomic ops])
>      fi
>     ;;
>     *) AC_MSG_ERROR(["$with_atomic_ops" is not a valid value for --with-atomic-ops]) ;;
>
> === modified file 'include/atomic/nolock.h'
> --- a/include/atomic/nolock.h	2008-02-05 15:47:11 +0000
> +++ b/include/atomic/nolock.h	2009-06-10 09:13:53 +0000
> @@ -14,7 +14,7 @@
>     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
>  
>  #if defined(__i386__) || defined(_MSC_VER) || \
> -    defined(__x86_64__) || defined(HAVE_GCC_ATOMIC_BUILTINS)
> +    defined(__x86_64__) || defined(MY_ATOMIC_MODE_GCC_BUILTINS)
>  
>  #  ifdef MY_ATOMIC_MODE_DUMMY
>  #    define LOCK_prefix ""
> @@ -22,7 +22,7 @@
>  #    define LOCK_prefix "lock"
>  #  endif
>  
> -#  ifdef HAVE_GCC_ATOMIC_BUILTINS
> +#  ifdef MY_ATOMIC_MODE_GCC_BUILTINS
>  #    include "gcc_builtins.h"
>  #  elif __GNUC__
>  #    include "x86-gcc.h"
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~maria-developers
> Post to     : maria-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~maria-developers
> More help   : https://help.launchpad.net/ListHelp



Follow ups

References