This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 07/14] Add a configure option to enable lock elision and disable by default
- From: Andi Kleen <andi at firstfloor dot org>
- To: libc-alpha at sourceware dot org
- Cc: Andi Kleen <ak at linux dot jf dot intel dot com>
- Date: Fri, 28 Jun 2013 13:53:20 -0700
- Subject: [PATCH 07/14] Add a configure option to enable lock elision and disable by default
- References: <1372452807-25216-1-git-send-email-andi at firstfloor dot org>
From: Andi Kleen <ak@linux.intel.com>
Can be enabled with --enable-lock-elision=yes at configure time.
Note the committer needs to regenerate configure and INSTALL.
nptl/:
2013-06-27 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.
* sysdeps/unix/sysv/linux/x86/elision-conf.c (elision_init):
Check ENABLE_LOCK_ELISION.
---
config.h.in | 3 +++
configure.in | 9 +++++++++
manual/install.texi | 3 +++
nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c | 3 +++
4 files changed, 18 insertions(+)
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
diff --git a/configure.in b/configure.in
index 56cd61c..03e9695 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 3608a11..e77f798 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 and rwlocks 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/sysdeps/unix/sysv/linux/x86/elision-conf.c b/nptl/sysdeps/unix/sysv/linux/x86/elision-conf.c
index bb217f3..c0c40e7 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
--
1.8.1.4