Add a configure option to enable lock elision and disable by default
authorAndi Kleen <ak@linux.intel.com>
Fri, 17 May 2013 02:17:14 +0000 (19:17 -0700)
committerAndi Kleen <ak@linux.intel.com>
Tue, 2 Jul 2013 15:46:55 +0000 (08:46 -0700)
Can be enabled with --enable-lock-elision=yes at configure time.

ChangeLog
INSTALL
config.h.in
configure
configure.in
manual/install.texi
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c

index 0b37552..11fbdd2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2013-07-02  Andi Kleen <ak@linux.intel.com>
+
+       * config.h.in (ENABLE_LOCK_ELISION): Add.
+       * configure.in (--enable-lock-elision): Add option.
+       * manual/install.texi: Document --enable lock elision.
+       * configure: Regenerate
+       * INSTALL: Regenerate.
+
 2013-07-02  H.J. Lu  <hongjiu.lu@intel.com>
 
        * sysdeps/i386/i686/multiarch/strcasecmp.S (__strcasecmp): Enable
diff --git a/INSTALL b/INSTALL
index a749293..f1b498a 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -133,6 +133,9 @@ will be used, and CFLAGS sets optimization options for the compiler.
      library.  This option hardcodes the newly built C library path in
      dynamic tests so that they can be invoked directly.
 
+`--enable-lock-elision=yes'
+     Enable lock elision for pthread mutexes and rwlocks by default.
+
 `--build=BUILD-SYSTEM'
 `--host=HOST-SYSTEM'
      These options are for cross-compiling.  If you specify both
index b5c6f16..6284e2a 100644 (file)
 /* Define if __stack_chk_guard canary should be randomized at program startup.  */
 #undef ENABLE_STACKGUARD_RANDOMIZE
 
+/* Define if lock elision should be enabled by default.  */
+#undef ENABLE_LOCK_ELISION
+
 /* Package description.  */
 #undef PKGVERSION
 
index edde310..a873b20 100755 (executable)
--- a/configure
+++ b/configure
@@ -742,6 +742,7 @@ enable_versioning
 enable_oldest_abi
 enable_hardcoded_path_in_tests
 enable_stackguard_randomization
+enable_lock_elision
 enable_add_ons
 enable_hidden_plt
 enable_bind_now
@@ -1399,6 +1400,9 @@ Optional Features:
   --enable-stackguard-randomization
                           initialize __stack_chk_guard canary with a random
                           number at program start
+  --enable-lock-elision=yes/no
+                          Enable lock elision for pthread mutexes and rwlocks
+                          by default
   --enable-add-ons[=DIRS...]
                           configure and build add-ons in DIR1,DIR2,... search
                           for add-ons if no parameter given
@@ -3472,6 +3476,18 @@ if test "$enable_stackguard_randomize" = yes; then
 
 fi
 
+# Check whether --enable-lock-elision was given.
+if test "${enable_lock_elision+set}" = set; then :
+  enableval=$enable_lock_elision; enable_lock_elision=$enableval
+else
+  enable_lock_elision=no
+fi
+
+if test "$enable_lock_elision" = yes ; then
+  $as_echo "#define ENABLE_LOCK_ELISION 1" >>confdefs.h
+
+fi
+
 # Check whether --enable-add-ons was given.
 if test "${enable_add_ons+set}" = set; then :
   enableval=$enable_add_ons;
index cc065db..cf118f8 100644 (file)
@@ -184,6 +184,15 @@ if test "$enable_stackguard_randomize" = yes; then
   AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
 fi
 
+AC_ARG_ENABLE([lock-elision],
+             AC_HELP_STRING([--enable-lock-elision[=yes/no]],
+                            [Enable lock elision for pthread mutexes and rwlocks by default]),
+             [enable_lock_elision=$enableval],
+             [enable_lock_elision=no])
+if test "$enable_lock_elision" = yes ; then
+  AC_DEFINE(ENABLE_LOCK_ELISION)
+fi
+
 dnl Generic infrastructure for drop-in additions to libc.
 AC_ARG_ENABLE([add-ons],
              AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
index 96d3bef..0c05f51 100644 (file)
@@ -160,6 +160,9 @@ By default, dynamic tests are linked to run with the installed C library.
 This option hardcodes the newly built C library path in dynamic tests
 so that they can be invoked directly.
 
+@item --enable-lock-elision=yes
+Enable lock elision for pthread mutexes by default.
+
 @item --build=@var{build-system}
 @itemx --host=@var{host-system}
 These options are for cross-compiling.  If you specify both options and
index d32046e..46cf308 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-02  Andi Kleen <ak@linux.intel.com>
+
+       * sysdeps/unix/sysv/linux/x86/elision-conf.c (elision_init):
+         Check ENABLE_LOCK_ELISION.
+
 2013-07-02  Andi Kleen  <ak@linux.intel.com>
 
        * pthread_mutexattr_settype.c (__pthread_mutexattr_settype):
index 6277e48..118cfa7 100644 (file)
@@ -16,6 +16,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>. */
 
+#include "config.h"
 #include <pthreadP.h>
 #include <init-arch.h>
 #include <elision-conf.h>
@@ -70,8 +71,10 @@ elision_init (int argc __attribute__ ((unused)),
              char **environ)
 {
   __elision_available = HAS_RTM;
+#ifdef ENABLE_LOCK_ELISION
   __pthread_force_elision = __libc_enable_secure ? 0 : __elision_available;
   __rwlock_rtm_enabled = __libc_enable_secure ? 0 : __elision_available;
+#endif
 }
 
 #ifdef SHARED