diff mbox

[2/3] Remove __ASSUME_SET_ROBUST_LIST

Message ID 1463608638-7215-2-git-send-email-adhemerval.zanella@linaro.org
State New
Headers show

Commit Message

Adhemerval Zanella May 18, 2016, 9:57 p.m. UTC
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                                       | 22 ++++++++++++++++++++++
 nptl/nptl-init.c                                | 11 ++---------
 nptl/pthreadP.h                                 |  2 --
 nptl/pthread_create.c                           |  8 +-------
 nptl/pthread_mutex_init.c                       |  2 --
 sysdeps/unix/sysv/linux/arm/kernel-features.h   |  1 -
 sysdeps/unix/sysv/linux/kernel-features.h       |  5 -----
 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 -
 10 files changed, 25 insertions(+), 29 deletions(-)

-- 
2.7.4

Comments

Adhemerval Zanella May 24, 2016, 7:07 p.m. UTC | #1
Ping.

On 18/05/2016 18:57, Adhemerval Zanella wrote:
> 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                                       | 22 ++++++++++++++++++++++

>  nptl/nptl-init.c                                | 11 ++---------

>  nptl/pthreadP.h                                 |  2 --

>  nptl/pthread_create.c                           |  8 +-------

>  nptl/pthread_mutex_init.c                       |  2 --

>  sysdeps/unix/sysv/linux/arm/kernel-features.h   |  1 -

>  sysdeps/unix/sysv/linux/kernel-features.h       |  5 -----

>  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 -

>  10 files changed, 25 insertions(+), 29 deletions(-)

> 

> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c

> index bdbdfed..cad14c7 100644

> --- a/nptl/nptl-init.c

> +++ b/nptl/nptl-init.c

> @@ -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

> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h

> index 4edc74b..d479a3e 100644

> --- a/nptl/pthreadP.h

> +++ b/nptl/pthreadP.h

> @@ -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;

> diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c

> index a834063..c3f4087 100644

> --- a/nptl/pthread_create.c

> +++ b/nptl/pthread_create.c

> @@ -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.  */

> diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c

> index 6e5acb6..6aef890 100644

> --- a/nptl/pthread_mutex_init.c

> +++ b/nptl/pthread_mutex_init.c

> @@ -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;

>      }

> diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h

> index 6ca607e..4012751 100644

> --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h

> @@ -24,7 +24,6 @@

>     configuration.  */

>  #if __LINUX_KERNEL_VERSION < 0x030E03

>  # undef __ASSUME_REQUEUE_PI

> -# undef __ASSUME_SET_ROBUST_LIST

>  #endif

>  

>  /* Define this if your 32-bit syscall API requires 64-bit register

> diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h

> index 43b72b1..45edad5 100644

> --- a/sysdeps/unix/sysv/linux/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/kernel-features.h

> @@ -59,11 +59,6 @@

>     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

>  

> diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h

> index 9e7f0e1..bec9539 100644

> --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h

> @@ -52,5 +52,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

> diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h

> index 09d5ece..3640b5f 100644

> --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h

> @@ -25,7 +25,6 @@

>     emulating LL/SC.  */

>  #if __mips == 1 || defined _MIPS_ARCH_R5900

>  # undef __ASSUME_REQUEUE_PI

> -# undef __ASSUME_SET_ROBUST_LIST

>  #endif

>  

>  /* Define this if your 32-bit syscall API requires 64-bit register

> diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h

> index 69c9c7c..dc7c4aa 100644

> --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h

> @@ -35,5 +35,4 @@

>     futex_atomic_cmpxchg_inatomic.  */

>  #if !defined __arch64__ && !defined __sparc_v9__

>  # undef __ASSUME_REQUEUE_PI

> -# undef __ASSUME_SET_ROBUST_LIST

>  #endif

>
Adhemerval Zanella June 2, 2016, 5:47 p.m. UTC | #2
Ping.

On 24/05/2016 16:07, Adhemerval Zanella wrote:
> Ping.

> 

> On 18/05/2016 18:57, Adhemerval Zanella wrote:

>> 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                                       | 22 ++++++++++++++++++++++

>>  nptl/nptl-init.c                                | 11 ++---------

>>  nptl/pthreadP.h                                 |  2 --

>>  nptl/pthread_create.c                           |  8 +-------

>>  nptl/pthread_mutex_init.c                       |  2 --

>>  sysdeps/unix/sysv/linux/arm/kernel-features.h   |  1 -

>>  sysdeps/unix/sysv/linux/kernel-features.h       |  5 -----

>>  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 -

>>  10 files changed, 25 insertions(+), 29 deletions(-)

>>

>> diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c

>> index bdbdfed..cad14c7 100644

>> --- a/nptl/nptl-init.c

>> +++ b/nptl/nptl-init.c

>> @@ -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

>> diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h

>> index 4edc74b..d479a3e 100644

>> --- a/nptl/pthreadP.h

>> +++ b/nptl/pthreadP.h

>> @@ -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;

>> diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c

>> index a834063..c3f4087 100644

>> --- a/nptl/pthread_create.c

>> +++ b/nptl/pthread_create.c

>> @@ -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.  */

>> diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c

>> index 6e5acb6..6aef890 100644

>> --- a/nptl/pthread_mutex_init.c

>> +++ b/nptl/pthread_mutex_init.c

>> @@ -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;

>>      }

>> diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h

>> index 6ca607e..4012751 100644

>> --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h

>> +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h

>> @@ -24,7 +24,6 @@

>>     configuration.  */

>>  #if __LINUX_KERNEL_VERSION < 0x030E03

>>  # undef __ASSUME_REQUEUE_PI

>> -# undef __ASSUME_SET_ROBUST_LIST

>>  #endif

>>  

>>  /* Define this if your 32-bit syscall API requires 64-bit register

>> diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h

>> index 43b72b1..45edad5 100644

>> --- a/sysdeps/unix/sysv/linux/kernel-features.h

>> +++ b/sysdeps/unix/sysv/linux/kernel-features.h

>> @@ -59,11 +59,6 @@

>>     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

>>  

>> diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h

>> index 9e7f0e1..bec9539 100644

>> --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h

>> +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h

>> @@ -52,5 +52,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

>> diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h

>> index 09d5ece..3640b5f 100644

>> --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h

>> +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h

>> @@ -25,7 +25,6 @@

>>     emulating LL/SC.  */

>>  #if __mips == 1 || defined _MIPS_ARCH_R5900

>>  # undef __ASSUME_REQUEUE_PI

>> -# undef __ASSUME_SET_ROBUST_LIST

>>  #endif

>>  

>>  /* Define this if your 32-bit syscall API requires 64-bit register

>> diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h

>> index 69c9c7c..dc7c4aa 100644

>> --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h

>> +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h

>> @@ -35,5 +35,4 @@

>>     futex_atomic_cmpxchg_inatomic.  */

>>  #if !defined __arch64__ && !defined __sparc_v9__

>>  # undef __ASSUME_REQUEUE_PI

>> -# undef __ASSUME_SET_ROBUST_LIST

>>  #endif

>>
diff mbox

Patch

diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index bdbdfed..cad14c7 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -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
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 4edc74b..d479a3e 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -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;
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index a834063..c3f4087 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -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.  */
diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
index 6e5acb6..6aef890 100644
--- a/nptl/pthread_mutex_init.c
+++ b/nptl/pthread_mutex_init.c
@@ -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;
     }
diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h
index 6ca607e..4012751 100644
--- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
@@ -24,7 +24,6 @@ 
    configuration.  */
 #if __LINUX_KERNEL_VERSION < 0x030E03
 # undef __ASSUME_REQUEUE_PI
-# undef __ASSUME_SET_ROBUST_LIST
 #endif
 
 /* Define this if your 32-bit syscall API requires 64-bit register
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 43b72b1..45edad5 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -59,11 +59,6 @@ 
    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
 
diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
index 9e7f0e1..bec9539 100644
--- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
@@ -52,5 +52,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
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index 09d5ece..3640b5f 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -25,7 +25,6 @@ 
    emulating LL/SC.  */
 #if __mips == 1 || defined _MIPS_ARCH_R5900
 # undef __ASSUME_REQUEUE_PI
-# undef __ASSUME_SET_ROBUST_LIST
 #endif
 
 /* Define this if your 32-bit syscall API requires 64-bit register
diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
index 69c9c7c..dc7c4aa 100644
--- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
@@ -35,5 +35,4 @@ 
    futex_atomic_cmpxchg_inatomic.  */
 #if !defined __arch64__ && !defined __sparc_v9__
 # undef __ASSUME_REQUEUE_PI
-# undef __ASSUME_SET_ROBUST_LIST
 #endif