This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Remove __PTHREAD_MUTEX_HAVE_ELISION undefined warning
- From: Adhemerval Zanella <azanella at linux dot vnet dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Date: Wed, 26 Mar 2014 17:29:56 -0300
- Subject: Re: [PATCH] Remove __PTHREAD_MUTEX_HAVE_ELISION undefined warning
- Authentication-results: sourceware.org; auth=none
- References: <5332D913 dot 5050903 at linux dot vnet dot ibm dot com> <20140326163647 dot 3E42A74493 at topped-with-meat dot com> <53330F3B dot 6090009 at linux dot vnet dot ibm dot com> <20140326175007 dot D832074496 at topped-with-meat dot com>
On 26-03-2014 14:50, Roland McGrath wrote:
> I don't understand what "support for 64 bits" or "support for 32 bits"
> means. OK, I've looked at bits/pthreadtypes.h so I do understand. But it
> seems pretty wrong to pretend this is a generic 32/64 sort of thing when it
> is really just about the x86-private layout of pthread_mutex_t. It seems
> more proper to have bits/pthreadtypes.h just define __PTHREAD_SPINS.
>
> That can be a separate cleanup if you want, and others may want to kibitz.
> But that might involve dropping the header you're adding here, so maybe you
> want to just resolve it now.
>
> If you want to go ahead with this change, then it's OK with the other nits
> above and this comment rewritten to describe concretely what the macro
> means. In actual usage so far, it doesn't actually mean anything about
> elision support per se. It just means something about how the fields of
> pthread_mutex_t are structured and hence what the initializer must look like.
> If that's all it's for, it should be made clear.
>
Cleanup up the whole __PTHREAD_SPINS seems the appropriated measure. This patch
moves the __PTHREAD_SPINS definition to arch specific header since pthread_mutex_t
layout is also arch specific and does not make sense disassociate them.
This makes the definition of __PTHREAD_MUTEX_HAVE_ELISION not required.
--
* nptl/sysdeps/pthread/pthread.h (__PTHREAD_MUTEX_HAVE_ELISION):
Remove macro usage.
(__PTHREAD_SPINS): Move definition to ...
* nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
(__PTHREAD_SPINS): ... here.
* nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* nptl/sysdeps/unix/sysv/linux/x86/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/alpha/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/m68k/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
* sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Likewise.
ports/ChangeLog.hppa
* ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h
(__PTHREAD_SPIN): Moved defintion from pthread.h.
---
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index 1e0c5dc..40a3e21 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -82,15 +82,6 @@ enum
#endif
-/* Mutex initializers. */
-#if __PTHREAD_MUTEX_HAVE_ELISION == 1 /* 64bit layout. */
-#define __PTHREAD_SPINS 0, 0
-#elif __PTHREAD_MUTEX_HAVE_ELISION == 2 /* 32bit layout. */
-#define __PTHREAD_SPINS { 0, 0 }
-#else
-#define __PTHREAD_SPINS 0
-#endif
-
#ifdef __PTHREAD_MUTEX_HAVE_PREV
# define PTHREAD_MUTEX_INITIALIZER \
{ { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
index 71bd3ae..20e5fc0 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
@@ -106,6 +106,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
index 23a1698..716f151 100644
--- a/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
@@ -20,8 +20,6 @@
#include <bits/wordsize.h>
-# define __PTHREAD_MUTEX_HAVE_ELISION 0
-
#if __WORDSIZE == 64
# define __SIZEOF_PTHREAD_ATTR_T 56
# define __SIZEOF_PTHREAD_MUTEX_T 40
@@ -107,6 +105,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
index e42d94e..f92958c 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h
@@ -77,6 +77,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
index be615b6..7b9edf2 100644
--- a/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h
@@ -106,6 +106,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/nptl/sysdeps/unix/sysv/linux/x86/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/x86/bits/pthreadtypes.h
index 28e5144..0ca10f2 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/x86/bits/pthreadtypes.h
@@ -105,7 +105,8 @@ typedef union
short __elision;
__pthread_list_t __list;
# define __PTHREAD_MUTEX_HAVE_PREV 1
-# define __PTHREAD_MUTEX_HAVE_ELISION 1
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+# define __PTHREAD_SPINS 0, 0
#else
unsigned int __nusers;
__extension__ union
@@ -116,7 +117,7 @@ typedef union
short __elision;
# define __spins d.__espins
# define __elision d.__elision
-# define __PTHREAD_MUTEX_HAVE_ELISION 2
+# define __PTHREAD_SPINS { 0, 0 }
} d;
__pthread_slist_t __list;
};
diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h
index deec4da..621895b 100644
--- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h
+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h
@@ -94,6 +94,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h
index f11eeab..76b94b4 100644
--- a/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h
@@ -74,6 +74,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/alpha/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/alpha/nptl/bits/pthreadtypes.h
index 6f85eae..c633c6d 100644
--- a/sysdeps/unix/sysv/linux/alpha/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/alpha/nptl/bits/pthreadtypes.h
@@ -73,6 +73,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h
index 26edce5..0a0af56 100644
--- a/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h
@@ -77,6 +77,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h
index b77b80a..49969bb 100644
--- a/sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/ia64/nptl/bits/pthreadtypes.h
@@ -74,6 +74,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/m68k/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/m68k/nptl/bits/pthreadtypes.h
index 283f240..b21f5f8 100644
--- a/sysdeps/unix/sysv/linux/m68k/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/m68k/nptl/bits/pthreadtypes.h
@@ -77,6 +77,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
index ca053e3..d4c5600 100644
--- a/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
@@ -76,6 +76,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h
index 9d9386b..712076c 100644
--- a/sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h
@@ -106,6 +106,9 @@ typedef union
long int __align;
} pthread_mutex_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
typedef union
{
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
diff --git a/sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h
index f469352..17bb112 100644
--- a/sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h
@@ -112,6 +112,9 @@ typedef union
int __align;
} pthread_mutexattr_t;
+/* Mutex __spins initilizer used by PTHREAD_MUTEX_INITIALIZER. */
+#define __PTHREAD_SPINS 0
+
/* Data structure for conditional variable handling. The structure of
the attribute type is not exposed on purpose. */