[PATCHv3,1/2] nptl: Add adapt_count parameter to lll_unlock_elision
Commit Message
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
"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!
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));
^
@@ -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)
@@ -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))
@@ -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))
@@ -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))