diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-05-23 20:51:45 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-05-23 20:51:45 +0000 |
commit | 5a8075b116280d0c1ece277e4be75250efca45b2 (patch) | |
tree | 7c63a4ba94c14bc46ececab97c299aff01078fb7 /nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S | |
parent | 6d59823c29df228415836f289e62064f95849e71 (diff) | |
download | glibc-5a8075b116280d0c1ece277e4be75250efca45b2.tar.gz glibc-5a8075b116280d0c1ece277e4be75250efca45b2.tar.xz glibc-5a8075b116280d0c1ece277e4be75250efca45b2.zip |
* init.c (__pthread_initialize_minimal_internal): Check whether
private futexes are available. * allocatestack.c (allocate_stack): Copy private_futex field from current thread into the new stack. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Use private futexes if they are available. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Likewise * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Adjust so that change in libc-lowlevellock.S allow using private futexes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Define FUTEX_PRIVATE_FLAG. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Use private futexes if they are available. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Likewise. * sysdeps/x86_64/tcb-offsets.sym: Add PRIVATE_FUTEX. * sysdeps/i386/tcb-offsets.sym: Likewise. * sysdeps/x86_64/tls.h (tcbhead_t): Add private_futex field. * sysdeps/i386/tls.h (tcbhead_t): Likewise.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S index 88885b735d..f246711489 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -17,6 +17,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <kernel-features.h> + /* In libc.so we do not unconditionally use the lock prefix. Only if the application is using threads. */ #ifndef UP @@ -27,4 +29,17 @@ 0: #endif +/* All locks in libc are private. Use the kernel feature if possible. */ +#define FUTEX_PRIVATE_FLAG 128 +#ifdef __ASSUME_PRIVATE_FUTEX +# define FUTEX_WAIT (0 | FUTEX_PRIVATE_FLAG) +# define FUTEX_WAKE (1 | FUTEX_PRIVATE_FLAG) +#else +# define LOAD_FUTEX_WAIT(reg) \ + movl %gs:PRIVATE_FUTEX, reg +# define LOAD_FUTEX_WAKE(reg) \ + movl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAKE, reg +#endif + #include "lowlevellock.S" |