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.
This commit is contained in:
parent
d7e4c642ef
commit
959aff9fa2
10
ChangeLog
10
ChangeLog
@ -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.
|
||||
|
||||
|
@ -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. */
|
||||
{
|
||||
|
@ -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. */
|
||||
|
@ -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. */
|
||||
|
@ -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. */
|
||||
|
@ -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. */
|
||||
|
@ -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) \
|
||||
#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) \
|
||||
CLASS __libc_lock_t NAME;
|
||||
#endif
|
||||
|
||||
#define __libc_rwlock_define_initialized(CLASS,NAME) \
|
||||
CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
|
||||
|
Loading…
x
Reference in New Issue
Block a user