diff options
author | Andi Kleen <ak@linux.intel.com> | 2013-05-16 19:17:14 -0700 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2013-07-02 08:46:55 -0700 |
commit | 1717da59aed9612becd56aaa1249aac695af4c8a (patch) | |
tree | 0b69e8ee62804482fd7bd951c918abdd9d15c0a3 | |
parent | 49186d21ef2d87986bccaf0a7c45c48c91b265f3 (diff) | |
download | glibc-1717da59aed9612becd56aaa1249aac695af4c8a.zip glibc-1717da59aed9612becd56aaa1249aac695af4c8a.tar.gz glibc-1717da59aed9612becd56aaa1249aac695af4c8a.tar.bz2 |
Add a configure option to enable lock elision and disable by default
Can be enabled with --enable-lock-elision=yes at configure time.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | INSTALL | 3 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 16 | ||||
-rw-r--r-- | configure.in | 9 | ||||
-rw-r--r-- | manual/install.texi | 3 | ||||
-rw-r--r-- | nptl/ChangeLog | 5 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c | 3 |
8 files changed, 50 insertions, 0 deletions
@@ -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 @@ -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 diff --git a/config.h.in b/config.h.in index b5c6f16..6284e2a 100644 --- a/config.h.in +++ b/config.h.in @@ -164,6 +164,9 @@ /* 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 @@ -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; diff --git a/configure.in b/configure.in index cc065db..cf118f8 100644 --- a/configure.in +++ b/configure.in @@ -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...@:>@], diff --git a/manual/install.texi b/manual/install.texi index 96d3bef..0c05f51 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -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 diff --git a/nptl/ChangeLog b/nptl/ChangeLog index d32046e..46cf308 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -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): diff --git a/nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c b/nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c index 6277e48..118cfa7 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c +++ b/nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c @@ -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 |