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