diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-04-18 07:56:20 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-04-18 07:56:20 +0000 |
commit | cd43f797c473dbb5f6f4031e4abb784719e64c93 (patch) | |
tree | 3a32b3a0aefa3ee4f6525d42052b567d649e48aa /linuxthreads | |
parent | dbacafe52e30710b5ec8707f60c531e6aeb857ed (diff) | |
download | glibc-cd43f797c473dbb5f6f4031e4abb784719e64c93.tar.gz glibc-cd43f797c473dbb5f6f4031e4abb784719e64c93.tar.xz glibc-cd43f797c473dbb5f6f4031e4abb784719e64c93.zip |
Update.
2000-04-18 Ulrich Drepper <drepper@redhat.com> * posix/Makefile (tests): Add tst-getaddrinfo. * posix/tst-getaddrinfo.c: New file. and setresuid from sysdep_routines.
Diffstat (limited to 'linuxthreads')
-rw-r--r-- | linuxthreads/ChangeLog | 10 | ||||
-rw-r--r-- | linuxthreads/internals.h | 5 | ||||
-rw-r--r-- | linuxthreads/spinlock.c | 4 | ||||
-rw-r--r-- | linuxthreads/sysdeps/sparc/sparc64/pt-machine.h | 8 |
4 files changed, 21 insertions, 6 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index fddbbcec78..2dc229ef1b 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,13 @@ +2000-04-18 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/sparc64/pt-machine.h (MEMORY_BARRIER): Use membar, + not stbar. + (READ_MEMORY_BARRIER): Define. + * spinlock.c (__pthread_spin_unlock): Use READ_MEMORY_BARRIER, not + MEMORY_BARRIER. + * internals.h (READ_MEMORY_BARRIER): Define if not defined in sysdep + headers. + 2000-04-17 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/i386/getcpuclockid.c diff --git a/linuxthreads/internals.h b/linuxthreads/internals.h index c1f4081c7b..079bf2cd64 100644 --- a/linuxthreads/internals.h +++ b/linuxthreads/internals.h @@ -359,11 +359,14 @@ static inline pthread_descr thread_self (void) /* If MEMORY_BARRIER isn't defined in pt-machine.h, assume the architecture doesn't need a memory barrier instruction (e.g. Intel x86). Some - architectures distinguish between normal/read and write barriers. */ + architectures distinguish between full, read and write barriers. */ #ifndef MEMORY_BARRIER #define MEMORY_BARRIER() #endif +#ifndef READ_MEMORY_BARRIER +#define READ_MEMORY_BARRIER() MEMORY_BARRIER() +#endif #ifndef WRITE_MEMORY_BARRIER #define WRITE_MEMORY_BARRIER() MEMORY_BARRIER() #endif diff --git a/linuxthreads/spinlock.c b/linuxthreads/spinlock.c index d13cea18c7..c482d910dc 100644 --- a/linuxthreads/spinlock.c +++ b/linuxthreads/spinlock.c @@ -122,12 +122,12 @@ again: several iterations of the while loop. Some processors (e.g. multiprocessor Alphas) could perform such reordering even though the loads are dependent. */ - MEMORY_BARRIER(); + READ_MEMORY_BARRIER(); thr = *ptr; } /* Prevent reordering of the load of lock->__status above and thr->p_nextlock below */ - MEMORY_BARRIER(); + READ_MEMORY_BARRIER(); /* Remove max prio thread from waiting list. */ if (maxptr == (pthread_descr *) &lock->__status) { /* If max prio thread is at head, remove it with compare-and-swap diff --git a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h index e22f4fed3c..e5695c0489 100644 --- a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h +++ b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h @@ -38,9 +38,11 @@ testandset (int *spinlock) /* Memory barrier; default is to do nothing */ -/* FIXME: is stbar OK, or should we use the more general membar instruction? - If so, which mode to pass to membar? */ -#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") +#define MEMORY_BARRIER() \ + __asm__ __volatile__("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore" : : : "memory") +/* Read barrier. */ +#define READ_MEMORY_BARRIER() \ + __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory") /* Write barrier. */ #define WRITE_MEMORY_BARRIER() \ __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory") |