]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Remove __ASSUME_SET_ROBUST_LIST
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 16 May 2016 22:01:10 +0000 (19:01 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 3 Jun 2016 18:31:10 +0000 (15:31 -0300)
This patch removes __ASSUME_SET_ROBUST_LIST usage and assumes that
kernel will correctly return if it supports or not
futex_atomic_cmpxchg_inatomic.

On minimum supported kernel (v3.2 and v2.6.32 for x86) kernel has:

2418 SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
2419                 size_t, len)
2420 {
2421         if (!futex_cmpxchg_enabled)
2422                 return -ENOSYS;

The patch also adds the __set_robust_list_avail runtime check for all
architectures, since for some the syscall may still return ENOSYS if
futex_atomic_cmpxchg_inatomic is not supported (for instance ARM).

Tested on armhf (with 3.8 kernel) and x86_64.

* nptl/nptl-init.c [__ASSUME_SET_ROBUST_LIST]
(__set_robust_list_avail): Remove define.
[__NR_set_robust_list] (__pthread_initialize_minimal_internal):
Likewise.
* nptl/pthreadP.h [__ASSUME_SET_ROBUST_LIST]
(__set_robust_list_avail): Likewise.
* nptl/pthread_create.c
[__NR_set_robust_list && !__ASSUME_SET_ROBUST_LIST]
(START_THREAD_DEFN): Likewise.
* nptl/pthread_mutex_init.c [!__ASSUME_SET_ROBUST_LIST]
(__pthread_mutex_init): Likewise.
* sysdeps/unix/sysv/linux/arm/kernel-features.h
(__ASSUME_SET_ROBUST_LIST): Likewise.
* sysdeps/unix/sysv/linux/kernel-features.h:
(__ASSUME_SET_ROBUST_LIST): Likewise.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h:
(__ASSUME_SET_ROBUST_LIST): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h:
(__ASSUME_SET_ROBUST_LIST): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h:
(__ASSUME_SET_ROBUST_LIST): Likewise.

ChangeLog
nptl/nptl-init.c
nptl/pthreadP.h
nptl/pthread_create.c
nptl/pthread_mutex_init.c
sysdeps/unix/sysv/linux/arm/kernel-features.h
sysdeps/unix/sysv/linux/kernel-features.h
sysdeps/unix/sysv/linux/m68k/kernel-features.h
sysdeps/unix/sysv/linux/mips/kernel-features.h
sysdeps/unix/sysv/linux/sparc/kernel-features.h

index feef0a6b99ddb16e29f2a92fe3e8028a08fd6b25..9657658f615b95614bd04aa01c0cdac2207f3a33 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,27 @@
 2016-06-03  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+       * nptl/nptl-init.c [__ASSUME_SET_ROBUST_LIST]
+       (__set_robust_list_avail): Remove define.
+       [__NR_set_robust_list] (__pthread_initialize_minimal_internal):
+       Likewise.
+       * nptl/pthreadP.h [__ASSUME_SET_ROBUST_LIST]
+       (__set_robust_list_avail): Likewise.
+       * nptl/pthread_create.c
+       [__NR_set_robust_list && !__ASSUME_SET_ROBUST_LIST]
+       (START_THREAD_DEFN): Likewise.
+       * nptl/pthread_mutex_init.c [!__ASSUME_SET_ROBUST_LIST]
+       (__pthread_mutex_init): Likewise.
+       * sysdeps/unix/sysv/linux/arm/kernel-features.h
+       (__ASSUME_SET_ROBUST_LIST): Likewise.
+       * sysdeps/unix/sysv/linux/kernel-features.h:
+       (__ASSUME_SET_ROBUST_LIST): Likewise.
+       * sysdeps/unix/sysv/linux/m68k/kernel-features.h:
+       (__ASSUME_SET_ROBUST_LIST): Likewise.
+       * sysdeps/unix/sysv/linux/mips/kernel-features.h:
+       (__ASSUME_SET_ROBUST_LIST): Likewise.
+       * sysdeps/unix/sysv/linux/sparc/kernel-features.h:
+       (__ASSUME_SET_ROBUST_LIST): Likewise.
+
        * nptl/pthread_mutex_init.c [__ASSUME_FUTEX_LOCK_PI]
        (prio_inherit_missing): Remove define.
        * sysdeps/unix/sysv/linux/arm/kernel-features.h
index bdbdfedcef956bca51b9473674381d36eac2c751..cad14c7b86bfc9ffaf5e08553803294567da6541 100644 (file)
@@ -48,14 +48,8 @@ int *__libc_multiple_threads_ptr attribute_hidden;
 size_t __static_tls_size;
 size_t __static_tls_align_m1;
 
-#ifndef __ASSUME_SET_ROBUST_LIST
 /* Negative if we do not have the system call and we can use it.  */
 int __set_robust_list_avail;
-# define set_robust_list_not_avail() \
-  __set_robust_list_avail = -1
-#else
-# define set_robust_list_not_avail() do { } while (0)
-#endif
 
 #ifndef __ASSUME_FUTEX_CLOCK_REALTIME
 /* Nonzero if we do not have FUTEX_CLOCK_REALTIME.  */
@@ -328,7 +322,7 @@ __pthread_initialize_minimal_internal (void)
     pd->robust_prev = &pd->robust_head;
 #endif
     pd->robust_head.list = &pd->robust_head;
-#ifdef __NR_set_robust_list
+
     pd->robust_head.futex_offset = (offsetof (pthread_mutex_t, __data.__lock)
                                    - offsetof (pthread_mutex_t,
                                                __data.__list.__next));
@@ -336,8 +330,7 @@ __pthread_initialize_minimal_internal (void)
     int res = INTERNAL_SYSCALL (set_robust_list, err, 2, &pd->robust_head,
                                sizeof (struct robust_list_head));
     if (INTERNAL_SYSCALL_ERROR_P (res, err))
-#endif
-      set_robust_list_not_avail ();
+      __set_robust_list_avail = -1;
   }
 
 #ifdef __NR_futex
index 4edc74b1ef5447c11a5157feb7d7dedd814a5ef0..d479a3e4e5dc280d66c81c2ae3f5bd53fb21e8c6 100644 (file)
@@ -199,10 +199,8 @@ hidden_proto (__pthread_keys)
 /* Number of threads running.  */
 extern unsigned int __nptl_nthreads attribute_hidden;
 
-#ifndef __ASSUME_SET_ROBUST_LIST
 /* Negative if we do not have the system call and we can use it.  */
 extern int __set_robust_list_avail attribute_hidden;
-#endif
 
 /* Thread Priority Protection.  */
 extern int __sched_fifo_min_prio attribute_hidden;
index 521604173325fdc222599f2902f4c1d796b8ef5d..1859cee5a3be655703c0ae4f6247a62925809d83 100644 (file)
@@ -271,10 +271,7 @@ START_THREAD_DEFN
   if (__glibc_unlikely (atomic_exchange_acq (&pd->setxid_futex, 0) == -2))
     futex_wake (&pd->setxid_futex, 1, FUTEX_PRIVATE);
 
-#ifdef __NR_set_robust_list
-# ifndef __ASSUME_SET_ROBUST_LIST
-  if (__set_robust_list_avail >= 0)
-# endif
+  if (__glibc_likely (__set_robust_list_avail >= 0))
     {
       INTERNAL_SYSCALL_DECL (err);
       /* This call should never fail because the initial call in init.c
@@ -282,7 +279,6 @@ START_THREAD_DEFN
       INTERNAL_SYSCALL (set_robust_list, err, 2, &pd->robust_head,
                        sizeof (struct robust_list_head));
     }
-#endif
 
 #ifdef SIGCANCEL
   /* If the parent was running cancellation handlers while creating
@@ -388,7 +384,6 @@ START_THREAD_DEFN
      the breakpoint reports TD_THR_RUN state rather than TD_THR_ZOMBIE.  */
   atomic_bit_set (&pd->cancelhandling, EXITING_BIT);
 
-#ifndef __ASSUME_SET_ROBUST_LIST
   /* If this thread has any robust mutexes locked, handle them now.  */
 # ifdef __PTHREAD_MUTEX_HAVE_PREV
   void *robust = pd->robust_head.list;
@@ -419,7 +414,6 @@ START_THREAD_DEFN
        }
       while (robust != (void *) &pd->robust_head);
     }
-#endif
 
   /* Mark the memory of the stack as usable to the kernel.  We free
      everything except for the space used for the TCB itself.  */
index 6e5acb6112c140197b690519ecee6ad6cda757b1..6aef89029e1bd7a3a856d3e626fca7545287b029 100644 (file)
@@ -91,11 +91,9 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
 
   if ((imutexattr->mutexkind & PTHREAD_MUTEXATTR_FLAG_ROBUST) != 0)
     {
-#ifndef __ASSUME_SET_ROBUST_LIST
       if ((imutexattr->mutexkind & PTHREAD_MUTEXATTR_FLAG_PSHARED) != 0
          && __set_robust_list_avail < 0)
        return ENOTSUP;
-#endif
 
       mutex->__data.__kind |= PTHREAD_MUTEX_ROBUST_NORMAL_NP;
     }
index 2b85a4029ae77bed56b798079cd197c999e5680a..58295838258487e67be253247f089cdf8cce36bf 100644 (file)
@@ -39,5 +39,4 @@
    configuration.  */
 #if __LINUX_KERNEL_VERSION < 0x030E03
 # undef __ASSUME_REQUEUE_PI
-# undef __ASSUME_SET_ROBUST_LIST
 #endif
index 63a6e11cf027e0d2951b009f38082f2d1718e6a8..102addf093116dcdd11bdd54e407cc92f4727769 100644 (file)
    they were introduced in 2.6.17-rc1, on SH in 2.6.19-rc1.  */
 #define __ASSUME_ATFCTS        1
 
-/* Support for inter-process robust mutexes was added in 2.6.17 (but
-   some architectures lack futex_atomic_cmpxchg_inatomic in some
-   configurations).  */
-#define __ASSUME_SET_ROBUST_LIST       1
-
 /* Support for private futexes was added in 2.6.22.  */
 #define __ASSUME_PRIVATE_FUTEX 1
 
index 9bde49c728f11ea9e703e187f6b9c9b89933ac60..27c5efef62bae1040f9f5e4904ef9010517f771e 100644 (file)
@@ -55,5 +55,4 @@
 /* No support for PI futexes or robust mutexes before 3.10 for m68k.  */
 #if __LINUX_KERNEL_VERSION < 0x030a00
 # undef __ASSUME_REQUEUE_PI
-# undef __ASSUME_SET_ROBUST_LIST
 #endif
index e84e84cfe6860d9957eab891eb7b0c54a0a316ad..f23620875cec41bffa3a81e1458690d5c9d052d8 100644 (file)
@@ -44,5 +44,4 @@
    emulating LL/SC.  */
 #if __mips == 1 || defined _MIPS_ARCH_R5900
 # undef __ASSUME_REQUEUE_PI
-# undef __ASSUME_SET_ROBUST_LIST
 #endif
index 2469159e9a35f1b78ca5d2ea26e27eab7bad6d4e..0b5efd72438c242e17296af2f72d85f7ebe10b2b 100644 (file)
@@ -42,5 +42,4 @@
    futex_atomic_cmpxchg_inatomic.  */
 #if !defined __arch64__ && !defined __sparc_v9__
 # undef __ASSUME_REQUEUE_PI
-# undef __ASSUME_SET_ROBUST_LIST
 #endif