← Back to team overview

maria-developers team mailing list archive

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

 

#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"




Follow ups