This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/3] Remove __ASSUME_FUTEX_LOCK_PI


Ping.

On 24/05/2016 16:07, Adhemerval Zanella wrote:
> Ping.
> 
> On 18/05/2016 18:57, Adhemerval Zanella wrote:
>> 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                                       | 15 +++++++++++++++
>>  nptl/pthread_mutex_init.c                       |  3 ---
>>  sysdeps/unix/sysv/linux/arm/kernel-features.h   |  1 -
>>  sysdeps/unix/sysv/linux/kernel-features.h       |  4 ----
>>  sysdeps/unix/sysv/linux/m68k/kernel-features.h  |  1 -
>>  sysdeps/unix/sysv/linux/mips/kernel-features.h  |  1 -
>>  sysdeps/unix/sysv/linux/sparc/kernel-features.h |  1 -
>>  7 files changed, 15 insertions(+), 11 deletions(-)
>>
>> diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
>> index 71ac7bc..6e5acb6 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 0a9ed77..6ca607e 100644
>> --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
>> +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
>> @@ -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
>> diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
>> index 5a1b204..43b72b1 100644
>> --- a/sysdeps/unix/sysv/linux/kernel-features.h
>> +++ b/sysdeps/unix/sysv/linux/kernel-features.h
>> @@ -64,10 +64,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 646bc4b..9e7f0e1 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
>> +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
>> @@ -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
>> diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
>> index e831645..09d5ece 100644
>> --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
>> +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
>> @@ -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
>> diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
>> index 386f230..69c9c7c 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h
>> +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
>> @@ -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
>>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]