aboutsummaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-20 10:29:20 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-20 10:29:20 +0000
commitb1aea0989d8a14dcddde207d5414b187b3692a9c (patch)
treeacd7251172b37523ac59fe6fb804d2a74df49e76 /nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
parent9daba4f4b988977b01427a47908a0ca4ab717984 (diff)
downloadglibc-b1aea0989d8a14dcddde207d5414b187b3692a9c.tar
glibc-b1aea0989d8a14dcddde207d5414b187b3692a9c.tar.gz
glibc-b1aea0989d8a14dcddde207d5414b187b3692a9c.tar.bz2
glibc-b1aea0989d8a14dcddde207d5414b187b3692a9c.zip
Update.
2003-03-20 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Include <atomic.h>. Remove __lll_add, __lll_dev_if_positive, and __lll_test_and_set definitions. Replace uses with calls to atomic_* functions. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c: Replace __lll_add and __lll_test_and_set calls with atomic_exchange_and_add and atomic_exchange calls respectively. * sysdeps/unix/sysv/linux/sem_post.c: Likewise. * sysdeps/unix/sysv/linux/sem_timedwait.c: Likewise. * sysdeps/unix/sysv/linux/sem_trywait.c: Likewise. * sysdeps/unix/sysv/linux/sem_wait.c: Likewise. * sysdeps/unix/sysv/linux/ia64/pthread_once.c: Likewise. * sysdeps/unix/sysv/linux/ia64/sem_port.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/pthread_once.c: Likewise. * allocatestack.c (allocate_stack): Assume atomic_exchange_and_add returns the old value.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h42
1 files changed, 2 insertions, 40 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
index fc37e5d4fb..6f999221c5 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
@@ -24,6 +24,7 @@
#include <sys/param.h>
#include <bits/pthreadtypes.h>
#include <ia64intrin.h>
+#include <atomic.h>
#define SYS_futex 1230
#define FUTEX_WAIT 0
@@ -89,45 +90,6 @@
#define __lll_compare_and_swap(futex, oldval, newval) \
__sync_val_compare_and_swap_si ((futex), (oldval), (newval))
-/* Add inc to *futex atomically and return the old value. */
-#define __lll_add(futex, inc) \
- ({ \
- int __val, __oldval; \
- int *__futex = (futex); \
- int __inc = inc; \
- \
- __val = *__futex; \
- do \
- { \
- __oldval = __val; \
- __val = __lll_compare_and_swap (__futex, __oldval, __oldval + __inc); \
- } \
- while (__builtin_expect (__val != __oldval, 0)); \
- __val; \
- })
-
-/* Decrement *futex if it is > 0, and return the old value. */
-#define __lll_dec_if_positive(futex) \
- ({ \
- int __val, __oldval; \
- int *__futex = (futex); \
- \
- __val = *__futex; \
- do \
- { \
- if (__builtin_expect (__val <= 0, 0)) \
- break; \
- __oldval = __val; \
- __val = __lll_compare_and_swap (__futex, __oldval, __oldval - 1); \
- } \
- while (__builtin_expect (__val != __oldval, 0)); \
- __val; \
- })
-
-/* Atomically store newval and return the old value. */
-#define __lll_test_and_set(futex, newval) \
- __sync_lock_test_and_set_si ((futex), (newval))
-
static inline int
__attribute__ ((always_inline))
__lll_mutex_trylock (int *futex)
@@ -176,7 +138,7 @@ static inline void
__attribute__ ((always_inline))
__lll_mutex_unlock (int *futex)
{
- int val = __lll_test_and_set (futex, 0);
+ int val = atomic_exchange (futex, 0);
if (__builtin_expect (val > 1, 0))
lll_futex_wake (futex, 1);