diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-02-22 12:10:26 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-05-14 08:44:03 -0300 |
commit | 959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494 (patch) | |
tree | e5b227f07c74b644e8b2d71a9186b1f9ea79baab | |
parent | d7e4c642ef13933361c276df87c52e83b2c212a2 (diff) | |
download | glibc-959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494.zip glibc-959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494.tar.gz glibc-959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494.tar.bz2 |
Assume LLL_LOCK_INITIALIZER is 0
Since hppa is not an outlier anymore regarding LLL_LOCK_INITIALIZER value,
we can now assume it 0 for all architectures.
Checked on a build for all major ABIs.
* nptl/nptl-init.c (__pthread_initialize_minimal_internal): Remove
initialization for LLL_LOCK_INITIALIZER different than 0.
* nptl/old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0):
Assume LLL_LOCK_INITIALIZER being 0.
* nptl/old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise.
* nptl/old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0):
Likewise.
* nptl/old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise.
* sysdeps/nptl/libc-lockP.h (__libc_lock_define_initialized): Likewise.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | nptl/nptl-init.c | 2 | ||||
-rw-r--r-- | nptl/old_pthread_cond_broadcast.c | 9 | ||||
-rw-r--r-- | nptl/old_pthread_cond_signal.c | 9 | ||||
-rw-r--r-- | nptl/old_pthread_cond_timedwait.c | 9 | ||||
-rw-r--r-- | nptl/old_pthread_cond_wait.c | 9 | ||||
-rw-r--r-- | sysdeps/nptl/libc-lockP.h | 17 |
7 files changed, 13 insertions, 52 deletions
@@ -1,5 +1,15 @@ 2019-05-14 Adhemerval Zanella <adhemerval.zanella@linaro.org> + * nptl/nptl-init.c (__pthread_initialize_minimal_internal): Remove + initialization for LLL_LOCK_INITIALIZER different than 0. + * nptl/old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): + Assume LLL_LOCK_INITIALIZER being 0. + * nptl/old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. + * nptl/old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): + Likewise. + * nptl/old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. + * sysdeps/nptl/libc-lockP.h (__libc_lock_define_initialized): Likewise. + * nptl/lowlevellock.c (__lll_lock_wait, __lll_lock_wait_private): Optimize futex call and add systemtap probe. diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index b845c6e..2926558 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -265,8 +265,6 @@ __pthread_initialize_minimal_internal (void) __pthread_initialize_pids (pd); THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]); THREAD_SETMEM (pd, user_stack, true); - if (LLL_LOCK_INITIALIZER != 0) - THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER); /* Initialize the robust mutex data. */ { diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c index f561eb9..04f285a 100644 --- a/nptl/old_pthread_cond_broadcast.c +++ b/nptl/old_pthread_cond_broadcast.c @@ -31,18 +31,9 @@ __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond) { pthread_cond_t *newcond; -#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; -#else - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t)); - if (newcond == NULL) - return ENOMEM; - - /* Initialize the condvar. */ - (void) pthread_cond_init (newcond, NULL); -#endif if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL)) /* Somebody else just initialized the condvar. */ diff --git a/nptl/old_pthread_cond_signal.c b/nptl/old_pthread_cond_signal.c index a167c8a..9b67cb8 100644 --- a/nptl/old_pthread_cond_signal.c +++ b/nptl/old_pthread_cond_signal.c @@ -31,18 +31,9 @@ __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond) { pthread_cond_t *newcond; -#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; -#else - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t)); - if (newcond == NULL) - return ENOMEM; - - /* Initialize the condvar. */ - (void) pthread_cond_init (newcond, NULL); -#endif if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL)) /* Somebody else just initialized the condvar. */ diff --git a/nptl/old_pthread_cond_timedwait.c b/nptl/old_pthread_cond_timedwait.c index f920320..a1fde85 100644 --- a/nptl/old_pthread_cond_timedwait.c +++ b/nptl/old_pthread_cond_timedwait.c @@ -32,18 +32,9 @@ __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex, { pthread_cond_t *newcond; -#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; -#else - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t)); - if (newcond == NULL) - return ENOMEM; - - /* Initialize the condvar. */ - (void) pthread_cond_init (newcond, NULL); -#endif if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL)) /* Somebody else just initialized the condvar. */ diff --git a/nptl/old_pthread_cond_wait.c b/nptl/old_pthread_cond_wait.c index 2be41b3..bb65340 100644 --- a/nptl/old_pthread_cond_wait.c +++ b/nptl/old_pthread_cond_wait.c @@ -31,18 +31,9 @@ __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex) { pthread_cond_t *newcond; -#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; -#else - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t)); - if (newcond == NULL) - return ENOMEM; - - /* Initialize the condvar. */ - (void) pthread_cond_init (newcond, NULL); -#endif if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL)) /* Somebody else just initialized the condvar. */ diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h index fc1bfe5..07d583f 100644 --- a/sysdeps/nptl/libc-lockP.h +++ b/sysdeps/nptl/libc-lockP.h @@ -71,23 +71,12 @@ typedef pthread_key_t __libc_key_t; For the C library we take a deeper look at the initializer. For this implementation all fields are initialized to zero. Therefore we don't initialize the variable which allows putting it into the - BSS section. (Except on PA-RISC and other odd architectures, where - initialized locks must be set to one due to the lack of normal - atomic operations.) */ + BSS section. */ +_Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0"); #define _LIBC_LOCK_INITIALIZER LLL_LOCK_INITIALIZER -#if IS_IN (libc) || IS_IN (libpthread) -# if LLL_LOCK_INITIALIZER == 0 -# define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME; -# else -# define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME = LLL_LOCK_INITIALIZER; -# endif -#else -# define __libc_lock_define_initialized(CLASS,NAME) \ +#define __libc_lock_define_initialized(CLASS,NAME) \ CLASS __libc_lock_t NAME; -#endif #define __libc_rwlock_define_initialized(CLASS,NAME) \ CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER; |