Message ID | 1463608638-7215-2-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
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 >
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 --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