[PATCHv3,1/2] nptl: Add adapt_count parameter to lll_unlock_elision

Message ID 55E8940B.2090305@linux.vnet.ibm.com
State Committed
Delegated to: Tulio Magno Quites Machado Filho
Headers

Commit Message

Paul E. Murphy Sept. 3, 2015, 6:40 p.m. UTC
  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.

2015-09-03  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
---
 nptl/pthread_mutex_unlock.c                    |    4 ++--
 sysdeps/unix/sysv/linux/powerpc/lowlevellock.h |    2 +-
 sysdeps/unix/sysv/linux/s390/lowlevellock.h    |    2 +-
 sysdeps/unix/sysv/linux/x86_64/lowlevellock.h  |    2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)
  

Comments

Tulio Magno Quites Machado Filho Oct. 8, 2015, 2:38 p.m. UTC | #1
"Paul E. Murphy" <murphyp@linux.vnet.ibm.com> writes:

> 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.
>
> 2015-09-03  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

LGTM.

I'm pushing it.

Thanks!
  
Joseph Myers Oct. 15, 2015, 10:47 p.m. UTC | #2
This appears to have broken the 32-bit x86 build.

pthread_mutex_unlock.c: In function '__pthread_mutex_unlock_usercnt':
pthread_mutex_unlock.c:67:40: error: macro "lll_unlock_elision" passed 3 arguments, but takes just 2
           PTHREAD_MUTEX_PSHARED (mutex));
                                        ^
  

Patch

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))