Message ID | 20190222192703.18177-3-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/4] Add single-thread.h header | expand |
Ping. On 22/02/2019 16:27, Adhemerval Zanella wrote: > 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/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/old_pthread_cond_broadcast.c | 9 --------- > nptl/old_pthread_cond_signal.c | 9 --------- > nptl/old_pthread_cond_timedwait.c | 9 --------- > nptl/old_pthread_cond_wait.c | 9 --------- > sysdeps/nptl/libc-lockP.h | 17 +++-------------- > 5 files changed, 3 insertions(+), 50 deletions(-) > > diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c > index f561eb941f..04f285a1b1 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 a167c8addc..9b67cb8a54 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 f920320b13..a1fde85825 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 2be41b36d6..bb65340a17 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 fc1bfe57e5..07d583f11a 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; >
Le vendredi 22 février 2019 à 16:27 -0300, Adhemerval Zanella a écrit : > 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/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/old_pthread_cond_broadcast.c | 9 --------- > nptl/old_pthread_cond_signal.c | 9 --------- > nptl/old_pthread_cond_timedwait.c | 9 --------- > nptl/old_pthread_cond_wait.c | 9 --------- > sysdeps/nptl/libc-lockP.h | 17 +++-------------- > 5 files changed, 3 insertions(+), 50 deletions(-) > > Proposed changes are fine for me. If LLL_LOCK_INITIALIZER is known to be 0 the following statement in __pthread_initialize_minimal_internal() from nptl/nptl-init.c could be removed: if (LLL_LOCK_INITIALIZER != 0) THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER); Regards. -- Yann Droneaud OPTEYA
On 29/04/2019 06:38, Yann Droneaud wrote: > Le vendredi 22 février 2019 à 16:27 -0300, Adhemerval Zanella a écrit : >> 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/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/old_pthread_cond_broadcast.c | 9 --------- >> nptl/old_pthread_cond_signal.c | 9 --------- >> nptl/old_pthread_cond_timedwait.c | 9 --------- >> nptl/old_pthread_cond_wait.c | 9 --------- >> sysdeps/nptl/libc-lockP.h | 17 +++-------------- >> 5 files changed, 3 insertions(+), 50 deletions(-) >> >> > > Proposed changes are fine for me. > > If LLL_LOCK_INITIALIZER is known to be 0 the following statement in > __pthread_initialize_minimal_internal() from nptl/nptl-init.c could be > removed: > > if (LLL_LOCK_INITIALIZER != 0) > THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER); > > Regards. > Indeed, I have added it on my local branch. Thanks for checking on this.
diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c index f561eb941f..04f285a1b1 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 a167c8addc..9b67cb8a54 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 f920320b13..a1fde85825 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 2be41b36d6..bb65340a17 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 fc1bfe57e5..07d583f11a 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;