mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-18 06:30:05 +00:00
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.
This commit is contained in:
parent
0677af20bb
commit
f5c77f78ec
15
ChangeLog
15
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>
|
2016-06-11 Paul Pluzhnikov <ppluzhnikov@google.com>
|
||||||
|
|
||||||
[BZ #19670]
|
[BZ #19670]
|
||||||
|
@ -37,7 +37,6 @@ static bool
|
|||||||
prio_inherit_missing (void)
|
prio_inherit_missing (void)
|
||||||
{
|
{
|
||||||
#ifdef __NR_futex
|
#ifdef __NR_futex
|
||||||
# ifndef __ASSUME_FUTEX_LOCK_PI
|
|
||||||
static int tpi_supported;
|
static int tpi_supported;
|
||||||
if (__glibc_unlikely (tpi_supported == 0))
|
if (__glibc_unlikely (tpi_supported == 0))
|
||||||
{
|
{
|
||||||
@ -48,8 +47,6 @@ prio_inherit_missing (void)
|
|||||||
tpi_supported = INTERNAL_SYSCALL_ERRNO (ret, err) == ENOSYS ? -1 : 1;
|
tpi_supported = INTERNAL_SYSCALL_ERRNO (ret, err) == ENOSYS ? -1 : 1;
|
||||||
}
|
}
|
||||||
return __glibc_unlikely (tpi_supported < 0);
|
return __glibc_unlikely (tpi_supported < 0);
|
||||||
# endif
|
|
||||||
return false;
|
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
futex_atomic_cmpxchg_inatomic, depending on kernel
|
futex_atomic_cmpxchg_inatomic, depending on kernel
|
||||||
configuration. */
|
configuration. */
|
||||||
#if __LINUX_KERNEL_VERSION < 0x030E03
|
#if __LINUX_KERNEL_VERSION < 0x030E03
|
||||||
# undef __ASSUME_FUTEX_LOCK_PI
|
|
||||||
# undef __ASSUME_REQUEUE_PI
|
# undef __ASSUME_REQUEUE_PI
|
||||||
# undef __ASSUME_SET_ROBUST_LIST
|
# undef __ASSUME_SET_ROBUST_LIST
|
||||||
#endif
|
#endif
|
||||||
|
@ -64,10 +64,6 @@
|
|||||||
configurations). */
|
configurations). */
|
||||||
#define __ASSUME_SET_ROBUST_LIST 1
|
#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. */
|
/* Support for private futexes was added in 2.6.22. */
|
||||||
#define __ASSUME_PRIVATE_FUTEX 1
|
#define __ASSUME_PRIVATE_FUTEX 1
|
||||||
|
|
||||||
|
@ -51,7 +51,6 @@
|
|||||||
|
|
||||||
/* No support for PI futexes or robust mutexes before 3.10 for m68k. */
|
/* No support for PI futexes or robust mutexes before 3.10 for m68k. */
|
||||||
#if __LINUX_KERNEL_VERSION < 0x030a00
|
#if __LINUX_KERNEL_VERSION < 0x030a00
|
||||||
# undef __ASSUME_FUTEX_LOCK_PI
|
|
||||||
# undef __ASSUME_REQUEUE_PI
|
# undef __ASSUME_REQUEUE_PI
|
||||||
# undef __ASSUME_SET_ROBUST_LIST
|
# undef __ASSUME_SET_ROBUST_LIST
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
/* The MIPS kernel does not support futex_atomic_cmpxchg_inatomic if
|
/* The MIPS kernel does not support futex_atomic_cmpxchg_inatomic if
|
||||||
emulating LL/SC. */
|
emulating LL/SC. */
|
||||||
#if __mips == 1 || defined _MIPS_ARCH_R5900
|
#if __mips == 1 || defined _MIPS_ARCH_R5900
|
||||||
# undef __ASSUME_FUTEX_LOCK_PI
|
|
||||||
# undef __ASSUME_REQUEUE_PI
|
# undef __ASSUME_REQUEUE_PI
|
||||||
# undef __ASSUME_SET_ROBUST_LIST
|
# undef __ASSUME_SET_ROBUST_LIST
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
/* 32-bit SPARC kernels do not support
|
/* 32-bit SPARC kernels do not support
|
||||||
futex_atomic_cmpxchg_inatomic. */
|
futex_atomic_cmpxchg_inatomic. */
|
||||||
#if !defined __arch64__ && !defined __sparc_v9__
|
#if !defined __arch64__ && !defined __sparc_v9__
|
||||||
# undef __ASSUME_FUTEX_LOCK_PI
|
|
||||||
# undef __ASSUME_REQUEUE_PI
|
# undef __ASSUME_REQUEUE_PI
|
||||||
# undef __ASSUME_SET_ROBUST_LIST
|
# undef __ASSUME_SET_ROBUST_LIST
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user