]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Remove __ASSUME_FUTEX_LOCK_PI
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 16 May 2016 13:35:25 +0000 (10:35 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 13 Jun 2016 11:36:34 +0000 (08:36 -0300)
This patch removes __ASSUME_FUTEX_LOCK_PI usage and assumes that
kernel will correctly return if it supports or not
futex_atomic_cmpxchg_inatomic.

Current PI mutex code already has runtime support by calling
prio_inherit_missing and returns ENOTSUP if the futex operation fails
at initialization (it issues a FUTEX_UNLOCK_PI futex operation).

Also, current minimum supported kernel (v3.2) will return ENOSYS if
futex_atomic_cmpxchg_inatomic is not supported in the system:

kernel/futex.c:

2628 long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
2629                 u32 __user *uaddr2, u32 val2, u32 val3)
2630 {
2631         int ret = -ENOSYS, cmd = op & FUTEX_CMD_MASK;
[...]
2667         case FUTEX_UNLOCK_PI:
2668                 if (futex_cmpxchg_enabled)
2669                         ret = futex_unlock_pi(uaddr, flags);
[...]
2686         return ret;
2687 }

The futex_cmpxchg_enabled is initialized by calling cmpxchg_futex_value_locked,
which calls futex_atomic_cmpxchg_inatomic.

For ARM futex_atomic_cmpxchg_inatomic will be either defined (if both
CONFIG_CPU_USE_DOMAINS and CONFIG_SMP are not defined) or use the
default generic implementation that returns ENOSYS.

For m68k is uses the default generic implementation.

For mips futex_atomic_cmpxchg_inatomic will return ENOSYS if cpu has no
'cpu_has_llsc' support (defined by each chip supporte inside kernel).

For sparc, 32-bit kernel will just use default generic implementation,
while 64-bit kernel has support.

Tested on ARM (v3.8 kernel) and x86_64.

* nptl/pthread_mutex_init.c [__ASSUME_FUTEX_LOCK_PI]
(prio_inherit_missing): Remove define.
* sysdeps/unix/sysv/linux/arm/kernel-features.h
(__ASSUME_FUTEX_LOCK_PI): Likewise.
* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_FUTEX_LOCK_PI):
Likewise.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_FUTEX_LOCK_PI): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_FUTEX_LOCK_PI): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
(__ASSUME_FUTEX_LOCK_PI): Likewise.

ChangeLog
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 36c3437b3082cb4e379cc40b1065f45aef8e2b5a..53ab8ca7e8387ddbe543bbfa9f8e34ef3ea057df 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2016-06-13  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+       * nptl/pthread_mutex_init.c [__ASSUME_FUTEX_LOCK_PI]
+       (prio_inherit_missing): Remove define.
+       * sysdeps/unix/sysv/linux/arm/kernel-features.h
+       (__ASSUME_FUTEX_LOCK_PI): Likewise.
+       * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_FUTEX_LOCK_PI):
+       Likewise.
+       * sysdeps/unix/sysv/linux/m68k/kernel-features.h
+       (__ASSUME_FUTEX_LOCK_PI): Likewise.
+       * sysdeps/unix/sysv/linux/mips/kernel-features.h
+       (__ASSUME_FUTEX_LOCK_PI): Likewise.
+       * sysdeps/unix/sysv/linux/sparc/kernel-features.h
+       (__ASSUME_FUTEX_LOCK_PI): Likewise.
+
 2016-06-11  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
        [BZ #19670]
index 71ac7bc7f3df4e0837a5e06e1b0effb3b8d43479..6e5acb6112c140197b690519ecee6ad6cda757b1 100644 (file)
@@ -37,7 +37,6 @@ static bool
 prio_inherit_missing (void)
 {
 #ifdef __NR_futex
-# ifndef __ASSUME_FUTEX_LOCK_PI
   static int tpi_supported;
   if (__glibc_unlikely (tpi_supported == 0))
     {
@@ -48,8 +47,6 @@ prio_inherit_missing (void)
       tpi_supported = INTERNAL_SYSCALL_ERRNO (ret, err) == ENOSYS ? -1 : 1;
     }
   return __glibc_unlikely (tpi_supported < 0);
-# endif
-  return false;
 #endif
   return true;
 }
index 0a9ed772e5d557fd6c83ec0138cdd403a9d6a4c8..6ca607eee0f04a90b8781d683b29f1acdb50f8f4 100644 (file)
@@ -23,7 +23,6 @@
    futex_atomic_cmpxchg_inatomic, depending on kernel
    configuration.  */
 #if __LINUX_KERNEL_VERSION < 0x030E03
-# undef __ASSUME_FUTEX_LOCK_PI
 # undef __ASSUME_REQUEUE_PI
 # undef __ASSUME_SET_ROBUST_LIST
 #endif
index 02c530b9e68899e59d71c20fcd9c56b6f394d3b6..1d3b554f81f44f4dadf13fdad2a491b7bab98883 100644 (file)
    configurations).  */
 #define __ASSUME_SET_ROBUST_LIST       1
 
-/* Support for PI futexes was added in 2.6.18 (but some architectures
-   lack futex_atomic_cmpxchg_inatomic in some configurations).  */
-#define __ASSUME_FUTEX_LOCK_PI 1
-
 /* Support for private futexes was added in 2.6.22.  */
 #define __ASSUME_PRIVATE_FUTEX 1
 
index dec04f00462067b4f5abdb2c98c87bfcdcd0383b..46ec60115f13aff7f0d6c5216fd46441ff73ea87 100644 (file)
@@ -51,7 +51,6 @@
 
 /* No support for PI futexes or robust mutexes before 3.10 for m68k.  */
 #if __LINUX_KERNEL_VERSION < 0x030a00
-# undef __ASSUME_FUTEX_LOCK_PI
 # undef __ASSUME_REQUEUE_PI
 # undef __ASSUME_SET_ROBUST_LIST
 #endif
index e831645681c950e7c850e6149380478549f4e928..09d5ecedd8a80765fd74d2b048dc8f0939f32629 100644 (file)
@@ -24,7 +24,6 @@
 /* The MIPS kernel does not support futex_atomic_cmpxchg_inatomic if
    emulating LL/SC.  */
 #if __mips == 1 || defined _MIPS_ARCH_R5900
-# undef __ASSUME_FUTEX_LOCK_PI
 # undef __ASSUME_REQUEUE_PI
 # undef __ASSUME_SET_ROBUST_LIST
 #endif
index 386f2304d134b8fbe0462e11f78c956a41836724..69c9c7c84e954f31fb871fc04c951e52b6ce18fa 100644 (file)
@@ -34,7 +34,6 @@
 /* 32-bit SPARC kernels do not support
    futex_atomic_cmpxchg_inatomic.  */
 #if !defined __arch64__ && !defined __sparc_v9__
-# undef __ASSUME_FUTEX_LOCK_PI
 # undef __ASSUME_REQUEUE_PI
 # undef __ASSUME_SET_ROBUST_LIST
 #endif