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 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

> @@ -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.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."


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