Commit d2d7b5bb authored by unknown's avatar unknown

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.
parent bb9a3f0c
...@@ -1726,20 +1726,7 @@ then ...@@ -1726,20 +1726,7 @@ then
fi fi
fi fi
AC_ARG_WITH([atomic-ops], AC_CACHE_CHECK([whether the compiler provides atomic builtins],
AC_HELP_STRING([--with-atomic-ops=rwlocks|smp|up],
[Implement atomic operations using pthread rwlocks or atomic CPU
instructions for multi-processor or uniprocessor
configuration. By default gcc built-in sync functions are used,
if available and 'smp' configuration otherwise.]))
case "$with_atomic_ops" in
"up") AC_DEFINE([MY_ATOMIC_MODE_DUMMY], [1],
[Assume single-CPU mode, no concurrency]) ;;
"rwlocks") AC_DEFINE([MY_ATOMIC_MODE_RWLOCKS], [1],
[Use pthread rwlocks for atomic ops]) ;;
"smp") ;;
"")
AC_CACHE_CHECK([whether the compiler provides atomic builtins],
[mysql_cv_gcc_atomic_builtins], [AC_TRY_RUN([ [mysql_cv_gcc_atomic_builtins], [AC_TRY_RUN([
int main() int main()
{ {
...@@ -1754,13 +1741,31 @@ case "$with_atomic_ops" in ...@@ -1754,13 +1741,31 @@ case "$with_atomic_ops" in
return -1; return -1;
return 0; return 0;
} }
], [mysql_cv_gcc_atomic_builtins=yes_but_disabled], ], [mysql_cv_gcc_atomic_builtins=yes],
[mysql_cv_gcc_atomic_builtins=no], [mysql_cv_gcc_atomic_builtins=no],
[mysql_cv_gcc_atomic_builtins=no])]) [mysql_cv_gcc_atomic_builtins=no])])
if test "x$mysql_cv_gcc_atomic_builtins" = xyes; then if test "x$mysql_cv_gcc_atomic_builtins" = xyes; then
AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS, 1, AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS, 1,
[Define to 1 if compiler provides atomic builtins.]) [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
instructions for multi-processor or uniprocessor
configuration. By default gcc built-in sync functions are used,
if available and 'smp' configuration otherwise.]))
case "$with_atomic_ops" in
"up") AC_DEFINE([MY_ATOMIC_MODE_DUMMY], [1],
[Assume single-CPU mode, no concurrency]) ;;
"rwlocks") AC_DEFINE([MY_ATOMIC_MODE_RWLOCKS], [1],
[Use pthread rwlocks for atomic ops]) ;;
"smp") ;;
"")
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 fi
;; ;;
*) AC_MSG_ERROR(["$with_atomic_ops" is not a valid value for --with-atomic-ops]) ;; *) AC_MSG_ERROR(["$with_atomic_ops" is not a valid value for --with-atomic-ops]) ;;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#if defined(__i386__) || defined(_MSC_VER) || \ #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 # ifdef MY_ATOMIC_MODE_DUMMY
# define LOCK_prefix "" # define LOCK_prefix ""
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
# define LOCK_prefix "lock" # define LOCK_prefix "lock"
# endif # endif
# ifdef HAVE_GCC_ATOMIC_BUILTINS # ifdef MY_ATOMIC_MODE_GCC_BUILTINS
# include "gcc_builtins.h" # include "gcc_builtins.h"
# elif __GNUC__ # elif __GNUC__
# include "x86-gcc.h" # include "x86-gcc.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment