* sysdeps/unix/sysv/linux/internaltypes.h: Introduce
authorUlrich Drepper <drepper@redhat.com>
Tue, 29 May 2007 16:15:48 +0000 (16:15 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 29 May 2007 16:15:48 +0000 (16:15 +0000)
COND_NWAITERS_SHIFT.
* pthread_cond_destroy.c: Use COND_NWAITERS_SHIFT instead of
COND_CLOCK_BITS.
* pthread_cond_init.c: Likewise.
* pthread_cond_timedwait.c: Likewise.
* pthread_cond_wait.c: Likewise.
* pthread_condattr_getclock.c: Likewise.
* pthread_condattr_setclock.c: Likewise.
* sysdeps/unix/sysv/linux/lowlevelcond.sym: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.

14 files changed:
nptl/ChangeLog
nptl/pthread_cond_destroy.c
nptl/pthread_cond_init.c
nptl/pthread_cond_timedwait.c
nptl/pthread_cond_wait.c
nptl/pthread_condattr_getclock.c
nptl/pthread_condattr_setclock.c
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
nptl/sysdeps/unix/sysv/linux/internaltypes.h
nptl/sysdeps/unix/sysv/linux/lowlevelcond.sym
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
nscd/nscd_helper.c

index e2a1850..9d71dcc 100644 (file)
@@ -1,3 +1,20 @@
+2007-05-29  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/internaltypes.h: Introduce
+       COND_NWAITERS_SHIFT.
+       * pthread_cond_destroy.c: Use COND_NWAITERS_SHIFT instead of
+       COND_CLOCK_BITS.
+       * pthread_cond_init.c: Likewise.
+       * pthread_cond_timedwait.c: Likewise.
+       * pthread_cond_wait.c: Likewise.
+       * pthread_condattr_getclock.c: Likewise.
+       * pthread_condattr_setclock.c: Likewise.
+       * sysdeps/unix/sysv/linux/lowlevelcond.sym: Likewise.
+       * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
+       * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
+
 2007-05-28  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c: Include
index 3e4ec8d..0b8d411 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -45,7 +45,7 @@ __pthread_cond_destroy (cond)
      pthread_cond_destroy needs to wait for them.  */
   unsigned int nwaiters = cond->__data.__nwaiters;
 
-  if (nwaiters >= (1 << COND_CLOCK_BITS))
+  if (nwaiters >= (1 << COND_NWAITERS_SHIFT))
     {
       /* Wake everybody on the associated mutex in case there are
          threads that have been requeued to it.
@@ -72,7 +72,7 @@ __pthread_cond_destroy (cond)
 
          nwaiters = cond->__data.__nwaiters;
        }
-      while (nwaiters >= (1 << COND_CLOCK_BITS));
+      while (nwaiters >= (1 << COND_NWAITERS_SHIFT));
     }
 
   return 0;
index 5e2e670..7c6d4c1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -31,8 +31,8 @@ __pthread_cond_init (cond, cond_attr)
   cond->__data.__lock = LLL_MUTEX_LOCK_INITIALIZER;
   cond->__data.__futex = 0;
   cond->__data.__nwaiters = (icond_attr != NULL
-                            && ((icond_attr->value & (COND_CLOCK_BITS << 1))
-                                >> 1));
+                            && ((icond_attr->value
+                                 & (COND_NWAITERS_SHIFT << 1)) >> 1));
   cond->__data.__total_seq = 0;
   cond->__data.__wakeup_seq = 0;
   cond->__data.__woken_seq = 0;
index fdbf43e..261b448 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -67,7 +67,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
   /* We have one new user of the condvar.  */
   ++cond->__data.__total_seq;
   ++cond->__data.__futex;
-  cond->__data.__nwaiters += 1 << COND_CLOCK_BITS;
+  cond->__data.__nwaiters += 1 << COND_NWAITERS_SHIFT;
 
   /* Remember the mutex we are using here.  If there is already a
      different address store this is a bad user bug.  Do not store
@@ -100,7 +100,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
        int ret;
        ret = INTERNAL_SYSCALL (clock_gettime, err, 2,
                                (cond->__data.__nwaiters
-                                & ((1 << COND_CLOCK_BITS) - 1)),
+                                & ((1 << COND_NWAITERS_SHIFT) - 1)),
                                &rt);
 # ifndef __ASSUME_POSIX_TIMERS
        if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (ret, err), 0))
@@ -189,13 +189,13 @@ __pthread_cond_timedwait (cond, mutex, abstime)
 
  bc_out:
 
-  cond->__data.__nwaiters -= 1 << COND_CLOCK_BITS;
+  cond->__data.__nwaiters -= 1 << COND_NWAITERS_SHIFT;
 
   /* If pthread_cond_destroy was called on this variable already,
      notify the pthread_cond_destroy caller all waiters have left
      and it can be successfully destroyed.  */
   if (cond->__data.__total_seq == -1ULL
-      && cond->__data.__nwaiters < (1 << COND_CLOCK_BITS))
+      && cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT))
     lll_futex_wake (&cond->__data.__nwaiters, 1);
 
   /* We are done with the condvar.  */
index f5f5cec..6e00a28 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -62,14 +62,14 @@ __condvar_cleanup (void *arg)
       ++cbuffer->cond->__data.__woken_seq;
     }
 
-  cbuffer->cond->__data.__nwaiters -= 1 << COND_CLOCK_BITS;
+  cbuffer->cond->__data.__nwaiters -= 1 << COND_NWAITERS_SHIFT;
 
   /* If pthread_cond_destroy was called on this variable already,
      notify the pthread_cond_destroy caller all waiters have left
      and it can be successfully destroyed.  */
   destroying = 0;
   if (cbuffer->cond->__data.__total_seq == -1ULL
-      && cbuffer->cond->__data.__nwaiters < (1 << COND_CLOCK_BITS))
+      && cbuffer->cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT))
     {
       lll_futex_wake (&cbuffer->cond->__data.__nwaiters, 1);
       destroying = 1;
@@ -111,7 +111,7 @@ __pthread_cond_wait (cond, mutex)
   /* We have one new user of the condvar.  */
   ++cond->__data.__total_seq;
   ++cond->__data.__futex;
-  cond->__data.__nwaiters += 1 << COND_CLOCK_BITS;
+  cond->__data.__nwaiters += 1 << COND_NWAITERS_SHIFT;
 
   /* Remember the mutex we are using here.  If there is already a
      different address store this is a bad user bug.  Do not store
@@ -168,13 +168,13 @@ __pthread_cond_wait (cond, mutex)
 
  bc_out:
 
-  cond->__data.__nwaiters -= 1 << COND_CLOCK_BITS;
+  cond->__data.__nwaiters -= 1 << COND_NWAITERS_SHIFT;
 
   /* If pthread_cond_destroy was called on this varaible already,
      notify the pthread_cond_destroy caller all waiters have left
      and it can be successfully destroyed.  */
   if (cond->__data.__total_seq == -1ULL
-      && cond->__data.__nwaiters < (1 << COND_CLOCK_BITS))
+      && cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT))
     lll_futex_wake (&cond->__data.__nwaiters, 1);
 
   /* We are done with the condvar.  */
index 84de918..3eedeb1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
 
@@ -26,6 +26,6 @@ pthread_condattr_getclock (attr, clock_id)
      clockid_t *clock_id;
 {
   *clock_id = (((((const struct pthread_condattr *) attr)->value) >> 1)
-              & ((1 << COND_CLOCK_BITS) - 1));
+              & ((1 << COND_NWAITERS_SHIFT) - 1));
   return 0;
 }
index 04e246b..9c03bce 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
 
@@ -62,11 +62,12 @@ pthread_condattr_setclock (attr, clock_id)
     return EINVAL;
 
   /* Make sure the value fits in the bits we reserved.  */
-  assert (clock_id < (1 << COND_CLOCK_BITS));
+  assert (clock_id < (1 << COND_NWAITERS_SHIFT));
 
   int *valuep = &((struct pthread_condattr *) attr)->value;
 
-  *valuep = (*valuep & ~(1 << (COND_CLOCK_BITS + 1)) & ~1) | (clock_id << 1);
+  *valuep = ((*valuep & ~(1 << (COND_NWAITERS_SHIFT + 1)) & ~1)
+            | (clock_id << 1));
 
   return 0;
 }
index f481a8e..93f4d56 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -87,7 +87,7 @@ __pthread_cond_timedwait:
        addl    $1, total_seq(%ebx)
        adcl    $0, total_seq+4(%ebx)
        addl    $1, cond_futex(%ebx)
-       addl    $(1 << clock_bits), cond_nwaiters(%ebx)
+       addl    $(1 << nwaiters_shift), cond_nwaiters(%ebx)
 
 #define FRAME_SIZE 24
        subl    $FRAME_SIZE, %esp
@@ -106,7 +106,7 @@ __pthread_cond_timedwait:
 #ifdef __NR_clock_gettime
        /* Get the clock number.  */
        movl    cond_nwaiters(%ebx), %ebx
-       andl    $((1 << clock_bits) - 1), %ebx
+       andl    $((1 << nwaiters_shift) - 1), %ebx
        /* Only clocks 0 and 1 are allowed so far.  Both are handled in the
           kernel.  */
        leal    4(%esp), %ecx
@@ -228,7 +228,7 @@ __pthread_cond_timedwait:
 14:    addl    $1, woken_seq(%ebx)
        adcl    $0, woken_seq+4(%ebx)
 
-24:    subl    $(1 << clock_bits), cond_nwaiters(%ebx)
+24:    subl    $(1 << nwaiters_shift), cond_nwaiters(%ebx)
 
        /* Wake up a thread which wants to destroy the condvar object.  */
        movl    total_seq(%ebx), %eax
@@ -236,7 +236,7 @@ __pthread_cond_timedwait:
        cmpl    $0xffffffff, %eax
        jne     25f
        movl    cond_nwaiters(%ebx), %eax
-       andl    $~((1 << clock_bits) - 1), %eax
+       andl    $~((1 << nwaiters_shift) - 1), %eax
        jne     25f
 
        addl    $cond_nwaiters, %ebx
@@ -424,7 +424,7 @@ __condvar_tw_cleanup:
 7:     addl    $1, woken_seq(%ebx)
        adcl    $0, woken_seq+4(%ebx)
 
-3:     subl    $(1 << clock_bits), cond_nwaiters(%ebx)
+3:     subl    $(1 << nwaiters_shift), cond_nwaiters(%ebx)
 
        /* Wake up a thread which wants to destroy the condvar object.  */
        xorl    %edi, %edi
@@ -433,7 +433,7 @@ __condvar_tw_cleanup:
        cmpl    $0xffffffff, %eax
        jne     4f
        movl    cond_nwaiters(%ebx), %eax
-       andl    $~((1 << clock_bits) - 1), %eax
+       andl    $~((1 << nwaiters_shift) - 1), %eax
        jne     4f
 
        addl    $cond_nwaiters, %ebx
index f16c7d9..c92cfbc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -80,7 +80,7 @@ __pthread_cond_wait:
        addl    $1, total_seq(%ebx)
        adcl    $0, total_seq+4(%ebx)
        addl    $1, cond_futex(%ebx)
-       addl    $(1 << clock_bits), cond_nwaiters(%ebx)
+       addl    $(1 << nwaiters_shift), cond_nwaiters(%ebx)
 
 #define FRAME_SIZE 16
        subl    $FRAME_SIZE, %esp
@@ -157,7 +157,7 @@ __pthread_cond_wait:
        adcl    $0, woken_seq+4(%ebx)
 
        /* Unlock */
-16:    subl    $(1 << clock_bits), cond_nwaiters(%ebx)
+16:    subl    $(1 << nwaiters_shift), cond_nwaiters(%ebx)
 
        /* Wake up a thread which wants to destroy the condvar object.  */
        movl    total_seq(%ebx), %eax
@@ -165,7 +165,7 @@ __pthread_cond_wait:
        cmpl    $0xffffffff, %eax
        jne     17f
        movl    cond_nwaiters(%ebx), %eax
-       andl    $~((1 << clock_bits) - 1), %eax
+       andl    $~((1 << nwaiters_shift) - 1), %eax
        jne     17f
 
        addl    $cond_nwaiters, %ebx
@@ -315,7 +315,7 @@ __condvar_w_cleanup:
 7:     addl    $1, woken_seq(%ebx)
        adcl    $0, woken_seq+4(%ebx)
 
-3:     subl    $(1 << clock_bits), cond_nwaiters(%ebx)
+3:     subl    $(1 << nwaiters_shift), cond_nwaiters(%ebx)
 
        /* Wake up a thread which wants to destroy the condvar object.  */
        xorl    %edi, %edi
@@ -324,7 +324,7 @@ __condvar_w_cleanup:
        cmpl    $0xffffffff, %eax
        jne     4f
        movl    cond_nwaiters(%ebx), %eax
-       andl    $~((1 << clock_bits) - 1), %eax
+       andl    $~((1 << nwaiters_shift) - 1), %eax
        jne     4f
 
        addl    $cond_nwaiters, %ebx
index a76a4ec..dfd53a0 100644 (file)
@@ -76,9 +76,11 @@ struct pthread_condattr
 
 
 /* The __NWAITERS field is used as a counter and to house the number
-   of bits which represent the clock.  COND_CLOCK_BITS is the number
-   of bits reserved for the clock.  */
-#define COND_CLOCK_BITS        1
+   of bits for other purposes.  COND_CLOCK_BITS is the number
+   of bits needed to represent the ID of the clock.  COND_NWAITERS_SHIFT
+   is the number of bits reserved for other purposes like the clock.  */
+#define COND_CLOCK_BITS                1
+#define COND_NWAITERS_SHIFT    8
 
 
 /* Read-write lock variable attribute data structure.  */
index c5e7978..18e1ada 100644 (file)
@@ -13,4 +13,4 @@ wakeup_seq    offsetof (pthread_cond_t, __data.__wakeup_seq)
 woken_seq      offsetof (pthread_cond_t, __data.__woken_seq)
 dep_mutex      offsetof (pthread_cond_t, __data.__mutex)
 broadcast_seq  offsetof (pthread_cond_t, __data.__broadcast_seq)
-clock_bits     COND_CLOCK_BITS
+nwaiters_shift COND_NWAITERS_SHIFT
index ad3ae1e..2afd601 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -111,7 +111,7 @@ __pthread_cond_timedwait:
        movq    8(%rsp), %rdi
        incq    total_seq(%rdi)
        incl    cond_futex(%rdi)
-       addl    $(1 << clock_bits), cond_nwaiters(%rdi)
+       addl    $(1 << nwaiters_shift), cond_nwaiters(%rdi)
 
        /* Install cancellation handler.  */
 #ifdef PIC
@@ -137,7 +137,7 @@ __pthread_cond_timedwait:
           structure stores the number minus 1.  */
        movq    8(%rsp), %rdi
        movl    cond_nwaiters(%rdi), %edi
-       andl    $((1 << clock_bits) - 1), %edi
+       andl    $((1 << nwaiters_shift) - 1), %edi
        /* Only clocks 0 and 1 are allowed so far.  Both are handled in the
           kernel.  */
        leaq    24(%rsp), %rsi
@@ -250,13 +250,13 @@ __pthread_cond_timedwait:
 9:     xorq    %r14, %r14
 14:    incq    woken_seq(%rdi)
 
-24:    subl    $(1 << clock_bits), cond_nwaiters(%rdi)
+24:    subl    $(1 << nwaiters_shift), cond_nwaiters(%rdi)
 
        /* Wake up a thread which wants to destroy the condvar object.  */
        cmpq    $0xffffffffffffffff, total_seq(%rdi)
        jne     25f
        movl    cond_nwaiters(%rdi), %eax
-       andl    $~((1 << clock_bits) - 1), %eax
+       andl    $~((1 << nwaiters_shift) - 1), %eax
        jne     25f
 
        addq    $cond_nwaiters, %rdi
index 969e80d..aaad22e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -77,14 +77,14 @@ __condvar_cleanup:
        incl    cond_futex(%rdi)
 6:     incq    woken_seq(%rdi)
 
-3:     subl    $(1 << clock_bits), cond_nwaiters(%rdi)
+3:     subl    $(1 << nwaiters_shift), cond_nwaiters(%rdi)
 
        /* Wake up a thread which wants to destroy the condvar object.  */
        xorq    %r12, %r12
        cmpq    $0xffffffffffffffff, total_seq(%rdi)
        jne     4f
        movl    cond_nwaiters(%rdi), %eax
-       andl    $~((1 << clock_bits) - 1), %eax
+       andl    $~((1 << nwaiters_shift) - 1), %eax
        jne     4f
 
        addq    $cond_nwaiters, %rdi
@@ -185,7 +185,7 @@ __pthread_cond_wait:
        movq    8(%rsp), %rdi
        incq    total_seq(%rdi)
        incl    cond_futex(%rdi)
-       addl    $(1 << clock_bits), cond_nwaiters(%rdi)
+       addl    $(1 << nwaiters_shift), cond_nwaiters(%rdi)
 
        /* Install cancellation handler.  */
 #ifdef PIC
@@ -262,13 +262,13 @@ __pthread_cond_wait:
        incq    woken_seq(%rdi)
 
        /* Unlock */
-16:    subl    $(1 << clock_bits), cond_nwaiters(%rdi)
+16:    subl    $(1 << nwaiters_shift), cond_nwaiters(%rdi)
 
        /* Wake up a thread which wants to destroy the condvar object.  */
        cmpq    $0xffffffffffffffff, total_seq(%rdi)
        jne     17f
        movl    cond_nwaiters(%rdi), %eax
-       andl    $~((1 << clock_bits) - 1), %eax
+       andl    $~((1 << nwaiters_shift) - 1), %eax
        jne     17f
 
        addq    $cond_nwaiters, %rdi
index bab4913..79644a4 100644 (file)
@@ -269,13 +269,13 @@ get_mapping (request_type type, const char *key,
                        != keylen, 0))
     goto out_close2;
 
-  mapfd = *(int *) CMSG_DATA (cmsg);
-
   if (__builtin_expect (CMSG_FIRSTHDR (&msg) == NULL
                        || (CMSG_FIRSTHDR (&msg)->cmsg_len
                            != CMSG_LEN (sizeof (int))), 0))
     goto out_close2;
 
+  mapfd = *(int *) CMSG_DATA (cmsg);
+
   struct stat64 st;
   if (__builtin_expect (strcmp (resdata, key) != 0, 0)
       || __builtin_expect (fstat64 (mapfd, &st) != 0, 0)