This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch ibm/2.22/master updated. glibc-2.22-73-gfb336c7
- From: murphyp at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 12 Apr 2016 22:09:26 -0000
- Subject: GNU C Library master sources branch ibm/2.22/master updated. glibc-2.22-73-gfb336c7
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, ibm/2.22/master has been updated
via fb336c7471eef7ded5a7889cac9e031ce7fc28fd (commit)
via 5b4aa65a489cdda0e29f27a4ca0e4f75fe2901cd (commit)
via c833c617a6001638921b79023cf1e8ee666b9844 (commit)
via 30fa323f82b8870e9c79d5240d97fc558271ffcc (commit)
via f664b663118642490b8776dcf4f30524a646dcbc (commit)
via e2c17de539da301c96afa4181347c63eb94d99b1 (commit)
via ab753f625e1dd77d388d1db6b9ecae54e871de84 (commit)
via a07df04187284a7993d890d5164a4433cebfd930 (commit)
via 740e642e32f600afd95d1bddcfd3a961e46a9472 (commit)
via 5fc92dc17d6a2eb6420cef33d8d6bd3a84bb968c (commit)
via 942c502aca15983fde794e4465adbcf42b51c379 (commit)
via d87bf6412b4cb0a5cd174d746eb596158075a5bb (commit)
from 0f0060399a67ae13cd83208733251e7792e78e37 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=fb336c7471eef7ded5a7889cac9e031ce7fc28fd
commit fb336c7471eef7ded5a7889cac9e031ce7fc28fd
Author: Joseph Myers <joseph@codesourcery.com>
Date: Tue Apr 12 17:03:00 2016 -0500
Fix i386 build for lll_unlock_elision change.
Tested for i386.
* sysdeps/unix/sysv/linux/i386/lowlevellock.h
(lll_unlock_elision): Add adapt_count parameter.
(cherry picked from commit 5ef193391bb0916ec03f0f06a9b1fe0b00591ad8)
diff --git a/ChangeLog b/ChangeLog
index 93a5ed6..3d88d79 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-04-12 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/i386/lowlevellock.h
+ (lll_unlock_elision): Add adapt_count parameter.
+
2016-04-12 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
* sysdeps/unix/sysv/linux/powerpc/elision-lock.c
diff --git a/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/sysdeps/unix/sysv/linux/i386/lowlevellock.h
index 58f5638..b8ccd31 100644
--- a/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+++ b/sysdeps/unix/sysv/linux/i386/lowlevellock.h
@@ -317,7 +317,7 @@ extern int __lll_trylock_elision(int *lock, short *adapt_count)
#define lll_lock_elision(futex, adapt_count, private) \
__lll_lock_elision (&(futex), &(adapt_count), private)
-#define lll_unlock_elision(futex, private) \
+#define lll_unlock_elision(futex, adapt_count, private) \
__lll_unlock_elision (&(futex), private)
#define lll_trylock_elision(futex, adapt_count) \
__lll_trylock_elision(&(futex), &(adapt_count))
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=5b4aa65a489cdda0e29f27a4ca0e4f75fe2901cd
commit 5b4aa65a489cdda0e29f27a4ca0e4f75fe2901cd
Author: Paul Murphy <murphyp@linux.vnet.ibm.com>
Date: Tue Apr 12 16:58:54 2016 -0500
powerpc: Optimize lock elision for pthread_mutex_t
With TLE enabled, the adapt count variable update incurs
an 8% overhead before entering the critical section of an
elided mutex.
Instead, if it is done right after leaving the critical
section, this serialization can be avoided.
This alters the existing behavior of __lll_trylock_elision
as it will only decrement the adapt_count if it successfully
acquires the lock.
* sysdeps/unix/sysv/linux/powerpc/elision-lock.c
(__lll_lock_elision): Remove adapt_count decrement...
* sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
(__lll_trylock_elision): Likewise.
* sysdeps/unix/sysv/linux/powerpc/elision-unlock.c
(__lll_unlock_elision): ... to here. And utilize
new adapt_count parameter.
* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
(__lll_unlock_elision): Update to include adapt_count
parameter.
(lll_unlock_elision): Pass pointer to adapt_count
variable.
(cherry picked from commit fadd2ad9cc36115440d50b0eae9299e65988917d)
diff --git a/ChangeLog b/ChangeLog
index c9b9974..93a5ed6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
2016-04-12 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
+ * sysdeps/unix/sysv/linux/powerpc/elision-lock.c
+ (__lll_lock_elision): Remove adapt_count decrement...
+ * sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
+ (__lll_trylock_elision): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/elision-unlock.c
+ (__lll_unlock_elision): ... to here. And utilize
+ new adapt_count parameter.
+ * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+ (__lll_unlock_elision): Update to include adapt_count
+ parameter.
+ (lll_unlock_elision): Pass pointer to adapt_count
+ variable.
+
+2016-04-12 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
+
* nptl/pthread_mutex_unlock.c (lll_unlock_elision):
Add elision adapt_count parameter to list of arguments.
* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-lock.c b/sysdeps/unix/sysv/linux/powerpc/elision-lock.c
index 82399de..2a0e540 100644
--- a/sysdeps/unix/sysv/linux/powerpc/elision-lock.c
+++ b/sysdeps/unix/sysv/linux/powerpc/elision-lock.c
@@ -47,7 +47,6 @@ __lll_lock_elision (int *lock, short *adapt_count, EXTRAARG int pshared)
{
if (*adapt_count > 0)
{
- (*adapt_count)--;
goto use_lock;
}
diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
index 5995e77..b391116 100644
--- a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
+++ b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
@@ -36,7 +36,6 @@ __lll_trylock_elision (int *futex, short *adapt_count)
/* Only try a transaction if it's worth it. */
if (*adapt_count > 0)
{
- (*adapt_count)--;
goto use_lock;
}
diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c b/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c
index 7234db6..4b4ae62 100644
--- a/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c
+++ b/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c
@@ -21,12 +21,20 @@
#include "htm.h"
int
-__lll_unlock_elision(int *lock, int pshared)
+__lll_unlock_elision (int *lock, short *adapt_count, int pshared)
{
/* When the lock was free we're in a transaction. */
if (*lock == 0)
__libc_tend (0);
else
- lll_unlock ((*lock), pshared);
+ {
+ lll_unlock ((*lock), pshared);
+
+ /* Update the adapt count AFTER completing the critical section.
+ Doing this here prevents unneeded stalling when entering
+ a critical section. Saving about 8% runtime on P8. */
+ if (*adapt_count > 0)
+ (*adapt_count)--;
+ }
return 0;
}
diff --git a/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
index 16479e7..6769c25 100644
--- a/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+++ b/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
@@ -32,7 +32,7 @@ extern int __lll_timedlock_elision
extern int __lll_lock_elision (int *futex, short *adapt_count, int private)
attribute_hidden;
-extern int __lll_unlock_elision(int *lock, int private)
+extern int __lll_unlock_elision (int *lock, short *adapt_count, int private)
attribute_hidden;
extern int __lll_trylock_elision(int *lock, short *adapt_count)
@@ -41,7 +41,7 @@ extern int __lll_trylock_elision(int *lock, short *adapt_count)
#define lll_lock_elision(futex, adapt_count, private) \
__lll_lock_elision (&(futex), &(adapt_count), private)
#define lll_unlock_elision(futex, adapt_count, private) \
- __lll_unlock_elision (&(futex), private)
+ __lll_unlock_elision (&(futex), &(adapt_count), private)
#define lll_trylock_elision(futex, adapt_count) \
__lll_trylock_elision (&(futex), &(adapt_count))
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=c833c617a6001638921b79023cf1e8ee666b9844
commit c833c617a6001638921b79023cf1e8ee666b9844
Author: Paul Murphy <murphyp@linux.vnet.ibm.com>
Date: Tue Apr 12 16:59:03 2016 -0500
nptl: Add adapt_count parameter to lll_unlock_elision
Adding this parameter will give architectures more freedom in
how they choose to update this variable. This change has no
effect on architectures which choose not to use it.
* nptl/pthread_mutex_unlock.c(lll_unlock_elision):
Add elision adapt_count parameter to list of arguments.
* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
(lll_unlock_elision): Update with new parameter list
* sysdeps/unix/sysv/linux/s390/lowlevellock.h
(lll_unlock_elision): Likewise
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
(lll_unlock_elision): Likewise
(cherry picked from commit e5e6bea22a2939fe7c415a375992f3ca19f9ff2e)
diff --git a/ChangeLog b/ChangeLog
index 3a83b87..c9b9974 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2016-04-12 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
+ * nptl/pthread_mutex_unlock.c (lll_unlock_elision):
+ Add elision adapt_count parameter to list of arguments.
+ * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+ (lll_unlock_elision): Update with new parameter list
+ * sysdeps/unix/sysv/linux/s390/lowlevellock.h
+ (lll_unlock_elision): Likewise
+ * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+ (lll_unlock_elision): Likewise
+
+2016-04-12 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
+
[BZ #19853]
* stdio-common/tst-sprintf3.c [TEST_N]: Refactor
TEST to take significant digits as second parameter.
diff --git a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
index 80939ba..9e864c1 100644
--- a/nptl/pthread_mutex_unlock.c
+++ b/nptl/pthread_mutex_unlock.c
@@ -24,7 +24,7 @@
#include <stap-probe.h>
#ifndef lll_unlock_elision
-#define lll_unlock_elision(a,b) ({ lll_unlock (a,b); 0; })
+#define lll_unlock_elision(a,b,c) ({ lll_unlock (a,c); 0; })
#endif
static int
@@ -63,7 +63,7 @@ __pthread_mutex_unlock_usercnt (mutex, decr)
else if (__glibc_likely (type == PTHREAD_MUTEX_TIMED_ELISION_NP))
{
/* Don't reset the owner/users fields for elision. */
- return lll_unlock_elision (mutex->__data.__lock,
+ return lll_unlock_elision (mutex->__data.__lock, mutex->__data.__elision,
PTHREAD_MUTEX_PSHARED (mutex));
}
else if (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex)
diff --git a/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
index 67db1de..16479e7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+++ b/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
@@ -40,7 +40,7 @@ extern int __lll_trylock_elision(int *lock, short *adapt_count)
#define lll_lock_elision(futex, adapt_count, private) \
__lll_lock_elision (&(futex), &(adapt_count), private)
-#define lll_unlock_elision(futex, private) \
+#define lll_unlock_elision(futex, adapt_count, private) \
__lll_unlock_elision (&(futex), private)
#define lll_trylock_elision(futex, adapt_count) \
__lll_trylock_elision (&(futex), &(adapt_count))
diff --git a/sysdeps/unix/sysv/linux/s390/lowlevellock.h b/sysdeps/unix/sysv/linux/s390/lowlevellock.h
index 163a731..cab5f4c 100644
--- a/sysdeps/unix/sysv/linux/s390/lowlevellock.h
+++ b/sysdeps/unix/sysv/linux/s390/lowlevellock.h
@@ -41,7 +41,7 @@ extern int __lll_trylock_elision(int *futex, short *adapt_count)
# define lll_lock_elision(futex, adapt_count, private) \
__lll_lock_elision (&(futex), &(adapt_count), private)
-# define lll_unlock_elision(futex, private) \
+# define lll_unlock_elision(futex, adapt_count, private) \
__lll_unlock_elision (&(futex), private)
# define lll_trylock_elision(futex, adapt_count) \
__lll_trylock_elision(&(futex), &(adapt_count))
diff --git a/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
index de525cd..1fbd31e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+++ b/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
@@ -342,7 +342,7 @@ extern int __lll_trylock_elision (int *lock, short *adapt_count)
#define lll_lock_elision(futex, adapt_count, private) \
__lll_lock_elision (&(futex), &(adapt_count), private)
-#define lll_unlock_elision(futex, private) \
+#define lll_unlock_elision(futex, adapt_count, private) \
__lll_unlock_elision (&(futex), private)
#define lll_trylock_elision(futex, adapt_count) \
__lll_trylock_elision (&(futex), &(adapt_count))
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=30fa323f82b8870e9c79d5240d97fc558271ffcc
commit 30fa323f82b8870e9c79d5240d97fc558271ffcc
Merge: 0f00603 f664b66
Author: Paul E. Murphy <murphyp@linux.vnet.ibm.com>
Date: Tue Apr 12 13:51:00 2016 -0500
Merge branch 'release/2.22/master' into ibm/2.22/master
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 110 ++++++++++
NEWS | 2 +-
config.h.in | 3 +
nptl/pthread_mutex_unlock.c | 4 +-
stdio-common/tst-sprintf3.c | 14 +-
sysdeps/i386/configure | 2 +-
sysdeps/i386/configure.ac | 2 +-
sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c | 25 ++-
sysdeps/s390/bits/link.h | 29 +++
sysdeps/s390/configure | 41 ++++
sysdeps/s390/configure.ac | 29 +++
sysdeps/s390/dl-procinfo.c | 8 +-
sysdeps/s390/dl-procinfo.h | 5 +-
sysdeps/s390/s390-32/dl-machine.h | 27 +++-
sysdeps/s390/s390-32/dl-trampoline.S | 134 +-----------
sysdeps/s390/s390-32/dl-trampoline.h | 231 +++++++++++++++++++++
sysdeps/s390/s390-64/dl-machine.h | 27 +++-
sysdeps/s390/s390-64/dl-trampoline.S | 130 +-----------
sysdeps/s390/s390-64/dl-trampoline.h | 225 ++++++++++++++++++++
sysdeps/unix/sysv/linux/i386/lowlevellock.h | 2 +-
sysdeps/unix/sysv/linux/powerpc/elision-lock.c | 1 -
sysdeps/unix/sysv/linux/powerpc/elision-trylock.c | 1 -
sysdeps/unix/sysv/linux/powerpc/elision-unlock.c | 12 +-
sysdeps/unix/sysv/linux/powerpc/lowlevellock.h | 6 +-
sysdeps/unix/sysv/linux/s390/bits/hwcap.h | 1 +
sysdeps/unix/sysv/linux/s390/lowlevellock.h | 2 +-
sysdeps/unix/sysv/linux/x86_64/lowlevellock.h | 2 +-
sysdeps/x86_64/configure | 4 +-
sysdeps/x86_64/configure.ac | 4 +-
29 files changed, 799 insertions(+), 284 deletions(-)
create mode 100644 sysdeps/s390/s390-32/dl-trampoline.h
create mode 100644 sysdeps/s390/s390-64/dl-trampoline.h
hooks/post-receive
--
GNU C Library master sources