00db10
commit b023e4ca99f5e81f90d87d23cd267ef2abd2388c
00db10
Author: Andi Kleen <ak@linux.intel.com>
00db10
Date:   Sat Dec 22 00:58:34 2012 -0800
00db10
00db10
    Add new internal mutex type flags for elision.
00db10
    
00db10
    Add Enable/disable flags used internally
00db10
    
00db10
    Extend the mutex initializers to have the fields needed for
00db10
    elision. The layout stays the same, and this is not visible
00db10
    to programs.
00db10
    
00db10
    These changes are not exposed outside pthread
00db10
Index: glibc-2.17-c758a686/nptl/pthreadP.h
00db10
===================================================================
00db10
--- glibc-2.17-c758a686.orig/nptl/pthreadP.h
00db10
+++ glibc-2.17-c758a686/nptl/pthreadP.h
00db10
@@ -61,6 +61,10 @@
00db10
 enum
00db10
 {
00db10
   PTHREAD_MUTEX_KIND_MASK_NP = 3,
00db10
+
00db10
+  PTHREAD_MUTEX_ELISION_NP    = 256,
00db10
+  PTHREAD_MUTEX_NO_ELISION_NP = 512,
00db10
+
00db10
   PTHREAD_MUTEX_ROBUST_NORMAL_NP = 16,
00db10
   PTHREAD_MUTEX_ROBUST_RECURSIVE_NP
00db10
   = PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_RECURSIVE_NP,
00db10
@@ -93,12 +97,21 @@ enum
00db10
   PTHREAD_MUTEX_PP_ERRORCHECK_NP
00db10
   = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ERRORCHECK_NP,
00db10
   PTHREAD_MUTEX_PP_ADAPTIVE_NP
00db10
-  = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ADAPTIVE_NP
00db10
+  = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ADAPTIVE_NP,
00db10
+  PTHREAD_MUTEX_ELISION_FLAGS_NP
00db10
+  = PTHREAD_MUTEX_ELISION_NP | PTHREAD_MUTEX_NO_ELISION_NP,
00db10
+
00db10
+  PTHREAD_MUTEX_TIMED_ELISION_NP =
00db10
+	  PTHREAD_MUTEX_TIMED_NP | PTHREAD_MUTEX_ELISION_NP,
00db10
+  PTHREAD_MUTEX_TIMED_NO_ELISION_NP =
00db10
+	  PTHREAD_MUTEX_TIMED_NP | PTHREAD_MUTEX_NO_ELISION_NP,
00db10
 };
00db10
 #define PTHREAD_MUTEX_PSHARED_BIT 128
00db10
 
00db10
 #define PTHREAD_MUTEX_TYPE(m) \
00db10
   ((m)->__data.__kind & 127)
00db10
+#define PTHREAD_MUTEX_TYPE_ELISION(m) \
00db10
+  ((m)->__data.__kind & (127|PTHREAD_MUTEX_ELISION_FLAGS_NP))
00db10
 
00db10
 #if LLL_PRIVATE == 0 && LLL_SHARED == 128
00db10
 # define PTHREAD_MUTEX_PSHARED(m) \
00db10
Index: glibc-2.17-c758a686/nptl/sysdeps/pthread/pthread.h
00db10
===================================================================
00db10
--- glibc-2.17-c758a686.orig/nptl/sysdeps/pthread/pthread.h
00db10
+++ glibc-2.17-c758a686/nptl/sysdeps/pthread/pthread.h
00db10
@@ -83,27 +83,39 @@ enum
00db10
 
00db10
 
00db10
 /* Mutex initializers.  */
00db10
+#if __PTHREAD_MUTEX_HAVE_ELISION == 1 /* 64bit layout.  */
00db10
+#define __PTHREAD_SPINS 0, 0
00db10
+#elif __PTHREAD_MUTEX_HAVE_ELISION == 2 /* 32bit layout.  */
00db10
+#define __PTHREAD_SPINS { 0, 0 }
00db10
+#else
00db10
+#define __PTHREAD_SPINS 0
00db10
+#endif
00db10
+
00db10
 #ifdef __PTHREAD_MUTEX_HAVE_PREV
00db10
 # define PTHREAD_MUTEX_INITIALIZER \
00db10
-  { { 0, 0, 0, 0, 0, 0, { 0, 0 } } }
00db10
+  { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
00db10
 # ifdef __USE_GNU
00db10
 #  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
00db10
-  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0, 0 } } }
00db10
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
00db10
 #  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
00db10
-  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { 0, 0 } } }
00db10
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } }
00db10
 #  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
00db10
-  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { 0, 0 } } }
00db10
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
00db10
+#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
00db10
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
00db10
+
00db10
 # endif
00db10
 #else
00db10
 # define PTHREAD_MUTEX_INITIALIZER \
00db10
-  { { 0, 0, 0, 0, 0, { 0 } } }
00db10
+  { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } }
00db10
 # ifdef __USE_GNU
00db10
 #  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
00db10
-  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } }
00db10
+  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } }
00db10
 #  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
00db10
-  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { 0 } } }
00db10
+  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } }
00db10
 #  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
00db10
-  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { 0 } } }
00db10
+  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } }
00db10
+
00db10
 # endif
00db10
 #endif
00db10