This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]