diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2016-05-16 10:35:25 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2016-06-03 15:30:55 -0300 |
commit | bab150583d44c1b1696c653412a2791259a8bb4b (patch) | |
tree | 3574fde973f709c11472a6db92963feae74ed0f1 | |
parent | 321e1cef26ccbece949b16622ef74c203bd8ecc6 (diff) | |
download | glibc-bab150583d44c1b1696c653412a2791259a8bb4b.tar.gz glibc-bab150583d44c1b1696c653412a2791259a8bb4b.tar.xz glibc-bab150583d44c1b1696c653412a2791259a8bb4b.zip |
Remove __ASSUME_FUTEX_LOCK_PI
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.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | nptl/pthread_mutex_init.c | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/kernel-features.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/kernel-features.h | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/m68k/kernel-features.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/kernel-features.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/kernel-features.h | 1 |
7 files changed, 15 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog index e6354b11ae..feef0a6b99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,20 @@ 2016-06-03 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-03 Adhemerval Zanella <adhemerval.zanella@linaro.org> + [BZ #20012] * libio/fmemopen.c (fmemopen_read): Use buffer maximum position, not length to calculate the buffer to read. diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c index 71ac7bc7f3..6e5acb6112 100644 --- a/nptl/pthread_mutex_init.c +++ b/nptl/pthread_mutex_init.c @@ -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; } diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h index 6f1606c833..2b85a4029a 100644 --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h @@ -38,7 +38,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 diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 9832f41167..63a6e11cf0 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -69,10 +69,6 @@ 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 diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h index 1b9fbc30d4..9bde49c728 100644 --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h @@ -54,7 +54,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 diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h index 83f7a4704d..e84e84cfe6 100644 --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h @@ -43,7 +43,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 diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h index abcef75852..2469159e9a 100644 --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h @@ -41,7 +41,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 |