aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/powerpc/bits
diff options
context:
space:
mode:
authorAdhemerval Zanella <azanella@linux.vnet.ibm.com>2014-11-07 12:25:32 -0500
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>2015-01-12 06:30:19 -0500
commit8d2c0a593bdefd220be0822fb70de6b8d3bfd39d (patch)
treef99ff4ee80aebb75309fad56b244535115d97288 /sysdeps/unix/sysv/linux/powerpc/bits
parentec4fbd48009314515eb31daaff7c25393f29d62b (diff)
downloadglibc-8d2c0a593bdefd220be0822fb70de6b8d3bfd39d.tar
glibc-8d2c0a593bdefd220be0822fb70de6b8d3bfd39d.tar.gz
glibc-8d2c0a593bdefd220be0822fb70de6b8d3bfd39d.tar.bz2
glibc-8d2c0a593bdefd220be0822fb70de6b8d3bfd39d.zip
powerpc: Add the lock elision using HTM
This patch adds support for lock elision using ISA 2.07 hardware transactional memory instructions for pthread_mutex primitives. Similar to s390 version, the for elision logic defined in 'force-elision.h' is only enabled if ENABLE_LOCK_ELISION is defined. Also, the lock elision code should be able to be built even with a compiler that does not provide HTM support with builtins. However I have noted the performance is sub-optimal due scheduling pressures.
Diffstat (limited to 'sysdeps/unix/sysv/linux/powerpc/bits')
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h16
1 files changed, 11 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
index 298b0f26b6..0f971cdf21 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
@@ -90,14 +90,23 @@ typedef union
binary compatibility. */
int __kind;
#if __WORDSIZE == 64
- int __spins;
+ short __spins;
+ short __elision;
__pthread_list_t __list;
# define __PTHREAD_MUTEX_HAVE_PREV 1
+# define __PTHREAD_SPINS 0, 0
#else
unsigned int __nusers;
__extension__ union
{
- int __spins;
+ struct
+ {
+ short __espins;
+ short __elision;
+# define __spins __elision_data.__espins
+# define __elision __elision_data.__elision
+# define __PTHREAD_SPINS { 0, 0 }
+ } __elision_data;
__pthread_slist_t __list;
};
#endif
@@ -106,9 +115,6 @@ typedef union
long int __align;
} pthread_mutex_t;
-/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER. */
-#define __PTHREAD_SPINS 0
-
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];