This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]