diff --git a/ChangeLog b/ChangeLog index 31bc91cdd5..32c26375cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-09-22 Jakub Jelinek + + * include/atomic.h (atomic_compare_and_exchange_val_rel, + atomic_compare_and_exchange_bool_rel): Swap oldval/newval arguments + to avoid confusion. + + * sysdeps/unix/opendir.c: Include string.h. + 2003-09-22 Ulrich Drepper * timezone/zdump.c: Update from tzcode2003c. diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index b975c89ec0..62c05e256d 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,7 @@ +2003-09-22 Jakub Jelinek + + * attr.c: Include stdlib.h. + 2003-09-18 Jakub Jelinek * sysdeps/pthread/pthread.h (pthread_getattr_np): Clarify usage. diff --git a/linuxthreads/attr.c b/linuxthreads/attr.c index 687334ffdb..5bef26504e 100644 --- a/linuxthreads/attr.c +++ b/linuxthreads/attr.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include diff --git a/nptl/Banner b/nptl/Banner index 5d6a6d0445..5f10f81731 100644 --- a/nptl/Banner +++ b/nptl/Banner @@ -1 +1 @@ -NPTL 0.59 by Ulrich Drepper +NPTL 0.60 by Ulrich Drepper diff --git a/nptl/ChangeLog b/nptl/ChangeLog index eb32fe193e..00bfbf9ad8 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2003-09-22 Ulrich Drepper + + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Adjust for latest + recommendation from AMD re avoidance of lock prefix. + 2003-09-22 Jakub Jelinek * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_timedlock_wait): Use diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h index 900c9cd5b1..8b084d069e 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h @@ -184,10 +184,7 @@ extern int lll_unlock_wake_cb (int *__futex) attribute_hidden; 2 - taken by more users */ -//#if defined NOT_IN_libc || defined UP -/* According to AMD it is not necessary to play tricks with avoiding the - lock instruction. */ -#if 1 +#if defined NOT_IN_libc || defined UP # define lll_trylock(futex) lll_mutex_trylock (futex) # define lll_lock(futex) lll_mutex_lock (futex) # define lll_unlock(futex) lll_mutex_unlock (futex) @@ -195,14 +192,19 @@ extern int lll_unlock_wake_cb (int *__futex) attribute_hidden; /* Special versions of the macros for use in libc itself. They avoid the lock prefix when the thread library is not used. + The code sequence to avoid unnecessary lock prefixes is what the AMD + guys suggested. If you do not like it, bring it up with AMD. + XXX In future we might even want to avoid it on UP machines. */ # define lll_trylock(futex) \ ({ unsigned char ret; \ __asm __volatile ("cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgl %2, %1; setne %0" \ + "lock; cmpxchgl %2, %1\n\t" \ + "jmp 1f\n" \ + "0:\tcmpxchgl %2, %1\n\t" \ + "1:setne %0" \ : "=a" (ret), "=m" (futex) \ : "r" (LLL_MUTEX_LOCK_INITIALIZER_LOCKED), "m" (futex),\ "0" (LLL_MUTEX_LOCK_INITIALIZER) \ @@ -214,7 +216,9 @@ extern int lll_unlock_wake_cb (int *__futex) attribute_hidden; (void) ({ int ignore1, ignore2, ignore3; \ __asm __volatile ("cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ "je 0f\n\t" \ - "lock\n" \ + "lock; cmpxchgl %0, %2\n\t" \ + "jnz 1f\n\t" \ + "jmp 2f\n" \ "0:\tcmpxchgl %0, %2\n\t" \ "jnz 1f\n\t" \ ".subsection 1\n" \ @@ -235,7 +239,9 @@ extern int lll_unlock_wake_cb (int *__futex) attribute_hidden; (void) ({ int ignore; \ __asm __volatile ("cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ "je 0f\n\t" \ - "lock\n" \ + "lock; decl %0\n\t" \ + "jne 1f\n\t" \ + "jmp 2f\n" \ "0:\tdecl %0\n\t" \ "jne 1f\n\t" \ ".subsection 1\n" \