diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2014-11-07 12:30:56 -0500 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2015-01-12 06:30:54 -0500 |
commit | 4b45943a6f62cfc239e79ad8902f5c7f71fd13ec (patch) | |
tree | e297f0a960da29f470318e704890fbd52bf77fef /sysdeps/unix/sysv/linux/powerpc/bits | |
parent | 8d2c0a593bdefd220be0822fb70de6b8d3bfd39d (diff) | |
download | glibc-4b45943a6f62cfc239e79ad8902f5c7f71fd13ec.tar glibc-4b45943a6f62cfc239e79ad8902f5c7f71fd13ec.tar.gz glibc-4b45943a6f62cfc239e79ad8902f5c7f71fd13ec.tar.bz2 glibc-4b45943a6f62cfc239e79ad8902f5c7f71fd13ec.zip |
powerpc: Add adaptive elision to rwlocks
This patch adds support for lock elision using ISA 2.07 hardware
transactional memory for rwlocks. The logic is similar to the
one presented in pthread_mutex lock elision.
Diffstat (limited to 'sysdeps/unix/sysv/linux/powerpc/bits')
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h index 0f971cdf21..7cbdb2cb77 100644 --- a/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h +++ b/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h @@ -172,11 +172,13 @@ typedef union unsigned int __nr_writers_queued; int __writer; int __shared; - unsigned long int __pad1; + unsigned char __rwelision; + unsigned char __pad1[7]; unsigned long int __pad2; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned int __flags; +# define __PTHREAD_RWLOCK_ELISION_EXTRA 0, {0, 0, 0, 0, 0, 0, 0 } } __data; # else struct @@ -187,20 +189,20 @@ typedef union unsigned int __writer_wakeup; unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; - unsigned char __pad1; + unsigned char __rwelision; unsigned char __pad2; unsigned char __shared; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned char __flags; int __writer; +#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 } __data; # endif char __size[__SIZEOF_PTHREAD_RWLOCK_T]; long int __align; } pthread_rwlock_t; -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 typedef union { |