This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 3/3] nptl: Define __PTHREAD_MUTEX_{NUSERS_AFTER_KIND,USE_UNION}
On 25/10/2017 12:41, Andreas Schwab wrote:
> On Okt 19 2017, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:
>
>> [BZ #22298]
>> * nptl/allocatestack.c (allocate_stack): Check if
>> __PTHREAD_MUTEX_HAVE_PREV is non-zero, instead if
>> __PTHREAD_MUTEX_HAVE_PREV is defined.
>> * nptl/descr.h (pthread): Likewise.
>> * nptl/nptl-init.c (__pthread_initialize_minimal_internal):
>> Likewise.
>> * nptl/pthread_create.c (START_THREAD_DEFN): Likewise.
>> * sysdeps/nptl/fork.c (__libc_fork): Likewise.
>> * sysdeps/nptl/pthread.h (PTHREAD_MUTEX_INITIALIZER): Likewise.
>> * sysdeps/nptl/bits/thread-shared-types.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> (__pthread_internal_list): Check __PTHREAD_MUTEX_USE_UNION instead
>> of __WORDSIZE for internal layout.
>> (__pthread_mutex_s): Check __PTHREAD_MUTEX_NUSERS_AFTER_KIND instead
>> of __WORDSIZE for internal __nusers layout and __PTHREAD_MUTEX_USE_UNION
>> instead of __WORDSIZE whether to use an union for __spins and __list
>> fields.
>> (__PTHREAD_MUTEX_HAVE_PREV): Define also for __PTHREAD_MUTEX_USE_UNION
>> case.
>> * sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/alpha/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/arm/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/hppa/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/ia64/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/m68k/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/mips/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/nios2/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/s390/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/sh/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/sparc/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/tile/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
>> * sysdeps/x86/nptl/bits/pthreadtypes-arch.h
>> (__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
>> defines.
> Ok.
>
>> diff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h
>> index 68b82b6..26073f8 100644
>> --- a/sysdeps/nptl/bits/thread-shared-types.h
>> +++ b/sysdeps/nptl/bits/thread-shared-types.h
>> @@ -42,6 +42,25 @@
>> the internal structure.
>> __PTHREAD_MUTEX_LOCK_ELISION - 1 if the architecture supports lock
>> elision or 0 otherwise.
>> + __PTHREAD_MUTEX_NUSERS_AFTER_KIND - control where to put __nusers. The
>> + preferred value for new architectures
>> + is 0.
>> + __PTHREAD_MUTEX_USE_UNION - control whether internal __spins and
>> + __list will be place inside an union for
> will be placed inside a union
Ack.
>
>> @@ -101,24 +120,27 @@ struct __pthread_mutex_s
>> int __lock __LOCK_ALIGNMENT;
>> unsigned int __count;
>> int __owner;
>> -#if __WORDSIZE == 64
>> +#if !__PTHREAD_MUTEX_NUSERS_AFTER_KIND
>> unsigned int __nusers;
>> #endif
>> /* KIND must stay at this position in the structure to maintain
>> binary compatibility with static initializers. */
>> int __kind;
>> __PTHREAD_COMPAT_PADDING_MID
>> -#if __WORDSIZE == 64
>> +#if !__PTHREAD_MUTEX_USE_UNION
>> __PTHREAD_SPINS_DATA;
>> __pthread_list_t __list;
>> # define __PTHREAD_MUTEX_HAVE_PREV 1
>> #else
>> +# if __PTHREAD_MUTEX_NUSERS_AFTER_KIND
>> unsigned int __nusers;
>> +# endif
> The last 3 lines should be moved before the !__PTHREAD_MUTEX_USE_UNION
> conditional.
>
> Andreas.
>
Ack. I will resubmit the patchset with the change to include
the _Static_assert inside the library.