diff mbox

[1/3] Remove __ASSUME_FUTEX_LOCK_PI

Message ID 1463608638-7215-1-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_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(-)

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

>
Adhemerval Zanella June 2, 2016, 5:46 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_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

>>
diff mbox

Patch

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