You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.8 KiB
102 lines
3.8 KiB
commit b023e4ca99f5e81f90d87d23cd267ef2abd2388c |
|
Author: Andi Kleen <ak@linux.intel.com> |
|
Date: Sat Dec 22 00:58:34 2012 -0800 |
|
|
|
Add new internal mutex type flags for elision. |
|
|
|
Add Enable/disable flags used internally |
|
|
|
Extend the mutex initializers to have the fields needed for |
|
elision. The layout stays the same, and this is not visible |
|
to programs. |
|
|
|
These changes are not exposed outside pthread |
|
Index: glibc-2.17-c758a686/nptl/pthreadP.h |
|
=================================================================== |
|
--- glibc-2.17-c758a686.orig/nptl/pthreadP.h |
|
+++ glibc-2.17-c758a686/nptl/pthreadP.h |
|
@@ -61,6 +61,10 @@ |
|
enum |
|
{ |
|
PTHREAD_MUTEX_KIND_MASK_NP = 3, |
|
+ |
|
+ PTHREAD_MUTEX_ELISION_NP = 256, |
|
+ PTHREAD_MUTEX_NO_ELISION_NP = 512, |
|
+ |
|
PTHREAD_MUTEX_ROBUST_NORMAL_NP = 16, |
|
PTHREAD_MUTEX_ROBUST_RECURSIVE_NP |
|
= PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_RECURSIVE_NP, |
|
@@ -93,12 +97,21 @@ enum |
|
PTHREAD_MUTEX_PP_ERRORCHECK_NP |
|
= PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ERRORCHECK_NP, |
|
PTHREAD_MUTEX_PP_ADAPTIVE_NP |
|
- = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ADAPTIVE_NP |
|
+ = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ADAPTIVE_NP, |
|
+ PTHREAD_MUTEX_ELISION_FLAGS_NP |
|
+ = PTHREAD_MUTEX_ELISION_NP | PTHREAD_MUTEX_NO_ELISION_NP, |
|
+ |
|
+ PTHREAD_MUTEX_TIMED_ELISION_NP = |
|
+ PTHREAD_MUTEX_TIMED_NP | PTHREAD_MUTEX_ELISION_NP, |
|
+ PTHREAD_MUTEX_TIMED_NO_ELISION_NP = |
|
+ PTHREAD_MUTEX_TIMED_NP | PTHREAD_MUTEX_NO_ELISION_NP, |
|
}; |
|
#define PTHREAD_MUTEX_PSHARED_BIT 128 |
|
|
|
#define PTHREAD_MUTEX_TYPE(m) \ |
|
((m)->__data.__kind & 127) |
|
+#define PTHREAD_MUTEX_TYPE_ELISION(m) \ |
|
+ ((m)->__data.__kind & (127|PTHREAD_MUTEX_ELISION_FLAGS_NP)) |
|
|
|
#if LLL_PRIVATE == 0 && LLL_SHARED == 128 |
|
# define PTHREAD_MUTEX_PSHARED(m) \ |
|
Index: glibc-2.17-c758a686/nptl/sysdeps/pthread/pthread.h |
|
=================================================================== |
|
--- glibc-2.17-c758a686.orig/nptl/sysdeps/pthread/pthread.h |
|
+++ glibc-2.17-c758a686/nptl/sysdeps/pthread/pthread.h |
|
@@ -83,27 +83,39 @@ enum |
|
|
|
|
|
/* 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, 0, { 0, 0 } } } |
|
+ { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } } |
|
# ifdef __USE_GNU |
|
# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ |
|
- { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0, 0 } } } |
|
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } |
|
# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ |
|
- { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { 0, 0 } } } |
|
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } } |
|
# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ |
|
- { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { 0, 0 } } } |
|
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } |
|
+# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ |
|
+ { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } |
|
+ |
|
# endif |
|
#else |
|
# define PTHREAD_MUTEX_INITIALIZER \ |
|
- { { 0, 0, 0, 0, 0, { 0 } } } |
|
+ { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } } |
|
# ifdef __USE_GNU |
|
# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ |
|
- { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } } |
|
+ { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } } |
|
# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ |
|
- { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { 0 } } } |
|
+ { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } } |
|
# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ |
|
- { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { 0 } } } |
|
+ { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } } |
|
+ |
|
# endif |
|
#endif
|
|
|