summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
diff options
context:
space:
mode:
authorPaul Murphy <murphyp@linux.vnet.ibm.com>2015-09-03 13:40:21 -0500
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>2015-10-15 18:56:10 -0300
commitfadd2ad9cc36115440d50b0eae9299e65988917d (patch)
tree98e5446434a66f7bd64cb1a0f31aac778ea31413 /sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
parente5e6bea22a2939fe7c415a375992f3ca19f9ff2e (diff)
downloadglibc-fadd2ad9cc36115440d50b0eae9299e65988917d.tar.gz
glibc-fadd2ad9cc36115440d50b0eae9299e65988917d.tar.xz
glibc-fadd2ad9cc36115440d50b0eae9299e65988917d.zip
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.
Diffstat (limited to 'sysdeps/unix/sysv/linux/powerpc/elision-trylock.c')
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/elision-trylock.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
index 7b6d1b9b98..440939cda1 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;
     }