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:30:56 -0500
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>2015-01-12 06:30:54 -0500
commit4b45943a6f62cfc239e79ad8902f5c7f71fd13ec (patch)
treee297f0a960da29f470318e704890fbd52bf77fef /sysdeps/unix/sysv/linux/powerpc/bits
parent8d2c0a593bdefd220be0822fb70de6b8d3bfd39d (diff)
downloadglibc-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.h8
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
{