about summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog7
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c3
3 files changed, 10 insertions, 5 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 3029aaf6f9..111e6493d5 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,12 @@
 2003-03-21  Ulrich Drepper  <drepper@redhat.com>
 
+	* sysdeps/unix/sysv/linux/ia64/lowlevellock.h
+	(__lll_mutex_trylock): Use atomic_compare_and_exchange_val_acq
+	instead of __lll_compare_and_swap.
+	* sysdeps/unix/sysv/linux/ia64/pthread_once.c (__pthread_once):
+	Likewise.
+	Removed definition if __lll_compare_and_swap.
+
 	* cancellation.c: Adjust for new form of compare&exchange macros.
 	* cleanup_defer.c: Likewise.
 	* init.c: Likewise.
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
index 6f999221c5..8fa96ed6a2 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
@@ -87,14 +87,11 @@
      __r10 == -1 ? -__r8 : __r8;					      \
   })
 
-#define __lll_compare_and_swap(futex, oldval, newval) \
-  __sync_val_compare_and_swap_si ((futex), (oldval), (newval))
-
 static inline int
 __attribute__ ((always_inline))
 __lll_mutex_trylock (int *futex)
 {
-  return __lll_compare_and_swap (futex, 0, 1) != 0;
+  return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0;
 }
 #define lll_mutex_trylock(futex) __lll_mutex_trylock (&(futex))
 
diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c
index c9e6be16b8..16f1279f8d 100644
--- a/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c
+++ b/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c
@@ -52,7 +52,8 @@ __pthread_once (once_control, init_routine)
 
 	  oldval = val;
 	  newval = (oldval & 3) | __fork_generation | 1;
-	  val = __lll_compare_and_swap (once_control, oldval, newval);
+	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+						     oldval);
 	}
       while (__builtin_expect (val != oldval, 0));