diff options
author | Torvald Riegel <triegel@redhat.com> | 2016-11-30 17:53:11 +0100 |
---|---|---|
committer | Torvald Riegel <triegel@redhat.com> | 2016-12-05 16:19:43 +0100 |
commit | ca6e601a9d4a72b3699cca15bad12ac1716bf49a (patch) | |
tree | fd761ea31c43377d02f2a097f8030411163d6905 /ChangeLog | |
parent | 71be79a25f1d9efeafa5c634c4499281e8c313f2 (diff) | |
download | glibc-ca6e601a9d4a72b3699cca15bad12ac1716bf49a.tar glibc-ca6e601a9d4a72b3699cca15bad12ac1716bf49a.tar.gz glibc-ca6e601a9d4a72b3699cca15bad12ac1716bf49a.tar.bz2 glibc-ca6e601a9d4a72b3699cca15bad12ac1716bf49a.zip |
Use C11-like atomics instead of plain memory accesses in x86 lock elision.
This uses atomic operations to access lock elision metadata that is accessed
concurrently (ie, adapt_count fields). The size of the data is less than a
word but accessed only with atomic loads and stores; therefore, we add
support for shorter-size atomic load and stores too.
* include/atomic.h (__atomic_check_size_ls): New.
(atomic_load_relaxed, atomic_load_acquire, atomic_store_relaxed,
atomic_store_release): Use it.
* sysdeps/x86/elide.h (ACCESS_ONCE): Remove.
(elision_adapt, ELIDE_LOCK): Use atomics.
* sysdeps/unix/sysv/linux/x86/elision-lock.c (__lll_lock_elision): Use
atomics and improve code comments.
* sysdeps/unix/sysv/linux/x86/elision-trylock.c
(__lll_trylock_elision): Likewise.
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -1,3 +1,15 @@ +2016-12-05 Torvald Riegel <triegel@redhat.com> + + * include/atomic.h (__atomic_check_size_ls): New. + (atomic_load_relaxed, atomic_load_acquire, atomic_store_relaxed, + atomic_store_release): Use it. + * sysdeps/x86/elide.h (ACCESS_ONCE): Remove. + (elision_adapt, ELIDE_LOCK): Use atomics. + * sysdeps/unix/sysv/linux/x86/elision-lock.c (__lll_lock_elision): Use + atomics and improve code comments. + * sysdeps/unix/sysv/linux/x86/elision-trylock.c + (__lll_trylock_elision): Likewise. + 2016-12-04 Samuel Thibault <samuel.thibault@ens-lyon.org> * hurd/hurd.h: Cast errno constants to error_t to fix usage in C++ |