* pthread_getattr_np.c: No need to install a cancellation handler,

this is no cancellation point.
	* pthread_getschedparam.c: Likewise.
	* pthread_setschedparam.c: Likewise.
	* pthread_setschedprio.c: Likewise.
	* sysdeps/unix/sysv/linux/lowlevellock.c: Remove all traces of
	lll_unlock_wake_cb.
	* sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
	* sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/sh/lowlevellock.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
This commit is contained in:
Ulrich Drepper 2007-05-30 04:45:03 +00:00
parent fc3f0ccb98
commit b03b0c2920
18 changed files with 34 additions and 163 deletions

View File

@ -1,8 +1,24 @@
2007-05-29 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
(__lll_mutex_unlock_wake): Add back label '1' which went AWOL quite
some time ago.
* pthread_getattr_np.c: No need to install a cancellation handler,
this is no cancellation point.
* pthread_getschedparam.c: Likewise.
* pthread_setschedparam.c: Likewise.
* pthread_setschedprio.c: Likewise.
* sysdeps/unix/sysv/linux/lowlevellock.c: Remove all traces of
lll_unlock_wake_cb.
* sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/sh/lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/sh/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Checking
whether there are more than one thread makes no sense here since

View 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.
@ -39,10 +39,6 @@ pthread_getattr_np (thread_id, attr)
struct pthread_attr *iattr = (struct pthread_attr *) attr;
int ret = 0;
/* We have to handle cancellation in the following code since we are
locking another threads desriptor. */
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &thread->lock);
lll_lock (thread->lock);
/* The thread library is responsible for keeping the values in the
@ -175,7 +171,5 @@ pthread_getattr_np (thread_id, attr)
lll_unlock (thread->lock);
pthread_cleanup_pop (0);
return ret;
}

View 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.
@ -38,10 +38,6 @@ __pthread_getschedparam (threadid, policy, param)
int result = 0;
/* We have to handle cancellation in the following code since we are
locking another threads descriptor. */
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &pd->lock);
lll_lock (pd->lock);
/* The library is responsible for maintaining the values at all
@ -74,8 +70,6 @@ __pthread_getschedparam (threadid, policy, param)
lll_unlock (pd->lock);
pthread_cleanup_pop (0);
return result;
}
strong_alias (__pthread_getschedparam, pthread_getschedparam)

View 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.
@ -39,10 +39,6 @@ __pthread_setschedparam (threadid, policy, param)
int result = 0;
/* We have to handle cancellation in the following code since we are
locking another threads desriptor. */
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &pd->lock);
lll_lock (pd->lock);
struct sched_param p;
@ -73,8 +69,6 @@ __pthread_setschedparam (threadid, policy, param)
lll_unlock (pd->lock);
pthread_cleanup_pop (0);
return result;
}
strong_alias (__pthread_setschedparam, pthread_setschedparam)

View 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.
@ -41,10 +41,6 @@ pthread_setschedprio (threadid, prio)
struct sched_param param;
param.sched_priority = prio;
/* We have to handle cancellation in the following code since we are
locking another threads desriptor. */
pthread_cleanup_push ((void (*) (void *)) lll_unlock_wake_cb, &pd->lock);
lll_lock (pd->lock);
/* If the thread should have higher priority because of some
@ -66,7 +62,5 @@ pthread_setschedprio (threadid, prio)
lll_unlock (pd->lock);
pthread_cleanup_pop (0);
return result;
}

View 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.
The GNU C Library is free software; you can redistribute it and/or
@ -237,8 +237,6 @@ typedef int lll_lock_t;
#define LLL_LOCK_INITIALIZER (0)
#define LLL_LOCK_INITIALIZER_LOCKED (1)
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are:
0 - untaken
1 - taken by one user

View File

@ -219,35 +219,6 @@ __lll_mutex_timedlock_wait:
#endif
#ifdef NOT_IN_libc
.globl lll_unlock_wake_cb
.type lll_unlock_wake_cb,@function
.hidden lll_unlock_wake_cb
.align 16
lll_unlock_wake_cb:
pushl %ebx
pushl %ecx
pushl %edx
movl 20(%esp), %ebx
LOCK
subl $1, (%ebx)
je 1f
movl $FUTEX_WAKE, %ecx
movl $1, %edx /* Wake one thread. */
movl $SYS_futex, %eax
movl $0, (%ebx)
ENTER_KERNEL
1: popl %edx
popl %ecx
popl %ebx
ret
.size lll_unlock_wake_cb,.-lll_unlock_wake_cb
#endif
.globl __lll_mutex_unlock_wake
.type __lll_mutex_unlock_wake,@function
.hidden __lll_mutex_unlock_wake

View File

@ -449,7 +449,6 @@ extern int __lll_lock_wait (int val, int *__futex)
__attribute ((regparm (2))) attribute_hidden;
extern int __lll_unlock_wake (int *__futex)
__attribute ((regparm (1))) attribute_hidden;
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are:

View 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 Jakub Jelinek <jakub@redhat.com>, 2003.
@ -226,8 +226,6 @@ extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *)
/* Type for lock object. */
typedef int lll_lock_t;
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* Initializers for lock. */
#define LLL_LOCK_INITIALIZER (0)
#define LLL_LOCK_INITIALIZER_LOCKED (1)

View File

@ -1,5 +1,5 @@
/* low level locking for pthread library. Generic futex-using version.
Copyright (C) 2003 Free Software Foundation, Inc.
Copyright (C) 2003, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
@ -76,20 +76,8 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime)
}
/* These don't get included in libc.so */
/* This function doesn't get included in libc.so */
#ifdef IS_IN_libpthread
int
lll_unlock_wake_cb (int *futex)
{
int val = atomic_exchange_rel (futex, 0);
if (__builtin_expect (val > 1, 0))
lll_futex_wake (futex, 1);
return 0;
}
int
__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
{
@ -127,5 +115,4 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
return 0;
}
#endif

View File

@ -263,8 +263,6 @@ typedef int lll_lock_t;
#define LLL_LOCK_INITIALIZER (0)
#define LLL_LOCK_INITIALIZER_LOCKED (1)
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are:
0 - untaken
1 - taken by one user

View 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.
@ -321,8 +321,6 @@ typedef int lll_lock_t;
#define lll_unlock(futex) lll_mutex_unlock (futex)
#define lll_islocked(futex) lll_mutex_islocked (futex)
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are:
1 - untaken
0 - taken by one user

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
/* Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -186,34 +186,6 @@ __lll_mutex_timedlock_wait:
#endif
#ifdef NOT_IN_libc
.globl lll_unlock_wake_cb
.type lll_unlock_wake_cb,@function
.hidden lll_unlock_wake_cb
.align 5
cfi_startproc
lll_unlock_wake_cb:
DEC (@r4, r2)
tst r2, r2
bt 1f
mov #FUTEX_WAKE, r5
mov #1, r6 /* Wake one thread. */
mov #0, r7
mov.l r7, @r4 /* Stores 0. */
mov #SYS_futex, r3
extu.b r3, r3
trapa #0x14
SYSCALL_INST_PAD
1:
rts
nop
cfi_endproc
.size lll_unlock_wake_cb,.-lll_unlock_wake_cb
#endif
.globl __lll_mutex_unlock_wake
.type __lll_mutex_unlock_wake,@function
.hidden __lll_mutex_unlock_wake

View 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.
The GNU C Library is free software; you can redistribute it and/or
@ -344,9 +344,6 @@ typedef int lll_lock_t;
} while (0)
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are:
0 - untaken
1 - taken by one user

View 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 Jakub Jelinek <jakub@redhat.com>, 2003.
@ -240,8 +240,6 @@ __lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime,
/* Type for lock object. */
typedef int lll_lock_t;
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* Initializers for lock. */
#define LLL_LOCK_INITIALIZER (0)
#define LLL_LOCK_INITIALIZER_LOCKED (1)

View File

@ -1,5 +1,5 @@
/* low level locking for pthread library. SPARC version.
Copyright (C) 2003, 2006 Free Software Foundation, Inc.
Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
@ -76,20 +76,8 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime)
}
/* These don't get included in libc.so */
/* This function doesn't get included in libc.so */
#ifdef IS_IN_libpthread
int
lll_unlock_wake_cb (int *futex)
{
int val = atomic_exchange_24_rel (futex, 0);
if (__builtin_expect (val > 1, 0))
lll_futex_wake (futex, 1);
return 0;
}
int
__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
{
@ -127,5 +115,4 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
return 0;
}
#endif

View File

@ -220,26 +220,6 @@ __lll_mutex_timedlock_wait:
#endif
#ifdef NOT_IN_libc
.globl lll_unlock_wake_cb
.type lll_unlock_wake_cb,@function
.hidden lll_unlock_wake_cb
.align 16
lll_unlock_wake_cb:
pushq %rsi
pushq %rdx
LOCK
addl $1, (%rdi)
jng 1f
popq %rdx
popq %rsi
retq
.size lll_unlock_wake_cb,.-lll_unlock_wake_cb
#endif
.globl __lll_mutex_unlock_wake
.type __lll_mutex_unlock_wake,@function
.hidden __lll_mutex_unlock_wake
@ -253,8 +233,7 @@ __lll_mutex_unlock_wake:
cfi_offset(%rsi, -16)
cfi_offset(%rdx, -24)
/* NB: the label '1' is needed by lll_unlock_wake_cb. */
1: movl $0, (%rdi)
movl $0, (%rdi)
LOAD_FUTEX_WAKE (%esi)
movl $1, %edx /* Wake one thread. */
movl $SYS_futex, %eax

View File

@ -455,9 +455,6 @@ typedef int lll_lock_t;
#define LLL_LOCK_INITIALIZER_LOCKED (1)
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are:
0 - untaken
1 - taken by one user