[01/13] linux: Remove unused internal futex functions

Message ID 20201123195256.3336217-1-adhemerval.zanella@linaro.org
State Committed
Headers
Series [01/13] linux: Remove unused internal futex functions |

Commit Message

Adhemerval Zanella Netto Nov. 23, 2020, 7:52 p.m. UTC
  The __futex_abstimed_wait usage was remove with 3102e28bd11 and the
__futex_abstimed_wait_cancelable by 323592fdc92 and b8d3e8fbaac.
The futex_lock_pi can be replaced by a futex_lock_pi64.

Checked on x86_64-linux-gnu and i686-linux-gnu.
---
 nptl/pthread_mutex_lock.c     |  3 +-
 sysdeps/nptl/futex-internal.h | 98 -----------------------------------
 2 files changed, 1 insertion(+), 100 deletions(-)
  

Comments

Lukasz Majewski Nov. 24, 2020, 5:51 p.m. UTC | #1
Hi Adhemerval,

> The __futex_abstimed_wait usage was remove with 3102e28bd11 and the
> __futex_abstimed_wait_cancelable by 323592fdc92 and b8d3e8fbaac.
> The futex_lock_pi can be replaced by a futex_lock_pi64.
> 
> Checked on x86_64-linux-gnu and i686-linux-gnu.
> ---
>  nptl/pthread_mutex_lock.c     |  3 +-
>  sysdeps/nptl/futex-internal.h | 98
> ----------------------------------- 2 files changed, 1 insertion(+),
> 100 deletions(-)
> 
> diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
> index fac774e608..0439002454 100644
> --- a/nptl/pthread_mutex_lock.c
> +++ b/nptl/pthread_mutex_lock.c
> @@ -413,8 +413,7 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
>  	    int private = (robust
>  			   ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
>  			   : PTHREAD_MUTEX_PSHARED (mutex));
> -	    int e = futex_lock_pi ((unsigned int *)
> &mutex->__data.__lock,
> -				   NULL, private);
> +	    int e = futex_lock_pi64 (&mutex->__data.__lock, NULL,
> private); if (e == ESRCH || e == EDEADLK)
>  	      {
>  		assert (e != EDEADLK
> diff --git a/sysdeps/nptl/futex-internal.h
> b/sysdeps/nptl/futex-internal.h index c27d0cdac8..21e3b74be6 100644
> --- a/sysdeps/nptl/futex-internal.h
> +++ b/sysdeps/nptl/futex-internal.h
> @@ -275,76 +275,6 @@ futex_abstimed_supported_clockid (clockid_t
> clockid) return lll_futex_supported_clockid (clockid);
>  }
>  
> -/* Like futex_reltimed_wait, but the provided timeout (ABSTIME) is an
> -   absolute point in time; a call will time out after this point in
> time.  */ -static __always_inline int
> -futex_abstimed_wait (unsigned int* futex_word, unsigned int expected,
> -		     clockid_t clockid,
> -		     const struct timespec* abstime, int private)
> -{
> -  /* Work around the fact that the kernel rejects negative timeout
> values
> -     despite them being valid.  */
> -  if (__glibc_unlikely ((abstime != NULL) && (abstime->tv_sec < 0)))
> -    return ETIMEDOUT;
> -  int err = lll_futex_clock_wait_bitset (futex_word, expected,
> -					 clockid, abstime,
> -					 private);
> -  switch (err)
> -    {
> -    case 0:
> -    case -EAGAIN:
> -    case -EINTR:
> -    case -ETIMEDOUT:
> -      return -err;
> -
> -    case -EFAULT: /* Must have been caused by a glibc or application
> bug.  */
> -    case -EINVAL: /* Either due to wrong alignment, unsupported
> -		     clockid or due to the timeout not being
> -		     normalized. Must have been caused by a glibc or
> -		     application bug.  */
> -    case -ENOSYS: /* Must have been caused by a glibc bug.  */
> -    /* No other errors are documented at this time.  */
> -    default:
> -      futex_fatal_error ();
> -    }
> -}
> -
> -/* Like futex_reltimed_wait but is a POSIX cancellation point.  */
> -static __always_inline int
> -futex_abstimed_wait_cancelable (unsigned int* futex_word,
> -				unsigned int expected,
> -				clockid_t clockid,
> -			        const struct timespec* abstime, int
> private) -{
> -  /* Work around the fact that the kernel rejects negative timeout
> values
> -     despite them being valid.  */
> -  if (__glibc_unlikely ((abstime != NULL) && (abstime->tv_sec < 0)))
> -    return ETIMEDOUT;
> -  int oldtype;
> -  oldtype = __pthread_enable_asynccancel ();
> -  int err = lll_futex_clock_wait_bitset (futex_word, expected,
> -					clockid, abstime,
> -					private);
> -  __pthread_disable_asynccancel (oldtype);
> -  switch (err)
> -    {
> -    case 0:
> -    case -EAGAIN:
> -    case -EINTR:
> -    case -ETIMEDOUT:
> -      return -err;
> -
> -    case -EFAULT: /* Must have been caused by a glibc or application
> bug.  */
> -    case -EINVAL: /* Either due to wrong alignment or due to the
> timeout not
> -		     being normalized.  Must have been caused by a
> glibc or
> -		     application bug.  */
> -    case -ENOSYS: /* Must have been caused by a glibc bug.  */
> -    /* No other errors are documented at this time.  */
> -    default:
> -      futex_fatal_error ();
> -    }
> -}
> -
>  /* Atomically wrt other futex operations on the same futex, this
> unblocks the specified number of processes, or all processes blocked
> on this futex if there are fewer than the specified number.
> Semantically, this is @@ -410,34 +340,6 @@ futex_wake (unsigned int*
> futex_word, int processes_to_wake, int private) futex.
>       - ETIMEDOUT if the ABSTIME expires.
>  */
> -static __always_inline int
> -futex_lock_pi (unsigned int *futex_word, const struct timespec
> *abstime,
> -	       int private)
> -{
> -  int err = lll_futex_timed_lock_pi (futex_word, abstime, private);
> -  switch (err)
> -    {
> -    case 0:
> -    case -EAGAIN:
> -    case -EINTR:
> -    case -ETIMEDOUT:
> -    case -ESRCH:
> -    case -EDEADLK:
> -    case -EINVAL: /* This indicates either state corruption or that
> the kernel
> -		     found a waiter on futex address which is
> waiting via
> -		     FUTEX_WAIT or FUTEX_WAIT_BITSET.  This is
> reported on
> -		     some futex_lock_pi usage
> (pthread_mutex_timedlock for
> -		     instance).  */
> -      return -err;
> -
> -    case -EFAULT: /* Must have been caused by a glibc or application
> bug.  */
> -    case -ENOSYS: /* Must have been caused by a glibc bug.  */
> -    /* No other errors are documented at this time.  */
> -    default:
> -      futex_fatal_error ();
> -    }
> -}
> -
>  static __always_inline int
>  futex_lock_pi64 (int *futex_word, const struct __timespec64 *abstime,
>                   int private)

It is great that we can consolidate the thread code and remove one not
needed.

Reviewed-by: Lukasz Majewski <lukma@denx.de>


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
  

Patch

diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index fac774e608..0439002454 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -413,8 +413,7 @@  __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 	    int private = (robust
 			   ? PTHREAD_ROBUST_MUTEX_PSHARED (mutex)
 			   : PTHREAD_MUTEX_PSHARED (mutex));
-	    int e = futex_lock_pi ((unsigned int *) &mutex->__data.__lock,
-				   NULL, private);
+	    int e = futex_lock_pi64 (&mutex->__data.__lock, NULL, private);
 	    if (e == ESRCH || e == EDEADLK)
 	      {
 		assert (e != EDEADLK
diff --git a/sysdeps/nptl/futex-internal.h b/sysdeps/nptl/futex-internal.h
index c27d0cdac8..21e3b74be6 100644
--- a/sysdeps/nptl/futex-internal.h
+++ b/sysdeps/nptl/futex-internal.h
@@ -275,76 +275,6 @@  futex_abstimed_supported_clockid (clockid_t clockid)
   return lll_futex_supported_clockid (clockid);
 }
 
-/* Like futex_reltimed_wait, but the provided timeout (ABSTIME) is an
-   absolute point in time; a call will time out after this point in time.  */
-static __always_inline int
-futex_abstimed_wait (unsigned int* futex_word, unsigned int expected,
-		     clockid_t clockid,
-		     const struct timespec* abstime, int private)
-{
-  /* Work around the fact that the kernel rejects negative timeout values
-     despite them being valid.  */
-  if (__glibc_unlikely ((abstime != NULL) && (abstime->tv_sec < 0)))
-    return ETIMEDOUT;
-  int err = lll_futex_clock_wait_bitset (futex_word, expected,
-					 clockid, abstime,
-					 private);
-  switch (err)
-    {
-    case 0:
-    case -EAGAIN:
-    case -EINTR:
-    case -ETIMEDOUT:
-      return -err;
-
-    case -EFAULT: /* Must have been caused by a glibc or application bug.  */
-    case -EINVAL: /* Either due to wrong alignment, unsupported
-		     clockid or due to the timeout not being
-		     normalized. Must have been caused by a glibc or
-		     application bug.  */
-    case -ENOSYS: /* Must have been caused by a glibc bug.  */
-    /* No other errors are documented at this time.  */
-    default:
-      futex_fatal_error ();
-    }
-}
-
-/* Like futex_reltimed_wait but is a POSIX cancellation point.  */
-static __always_inline int
-futex_abstimed_wait_cancelable (unsigned int* futex_word,
-				unsigned int expected,
-				clockid_t clockid,
-			        const struct timespec* abstime, int private)
-{
-  /* Work around the fact that the kernel rejects negative timeout values
-     despite them being valid.  */
-  if (__glibc_unlikely ((abstime != NULL) && (abstime->tv_sec < 0)))
-    return ETIMEDOUT;
-  int oldtype;
-  oldtype = __pthread_enable_asynccancel ();
-  int err = lll_futex_clock_wait_bitset (futex_word, expected,
-					clockid, abstime,
-					private);
-  __pthread_disable_asynccancel (oldtype);
-  switch (err)
-    {
-    case 0:
-    case -EAGAIN:
-    case -EINTR:
-    case -ETIMEDOUT:
-      return -err;
-
-    case -EFAULT: /* Must have been caused by a glibc or application bug.  */
-    case -EINVAL: /* Either due to wrong alignment or due to the timeout not
-		     being normalized.  Must have been caused by a glibc or
-		     application bug.  */
-    case -ENOSYS: /* Must have been caused by a glibc bug.  */
-    /* No other errors are documented at this time.  */
-    default:
-      futex_fatal_error ();
-    }
-}
-
 /* Atomically wrt other futex operations on the same futex, this unblocks the
    specified number of processes, or all processes blocked on this futex if
    there are fewer than the specified number.  Semantically, this is
@@ -410,34 +340,6 @@  futex_wake (unsigned int* futex_word, int processes_to_wake, int private)
        futex.
      - ETIMEDOUT if the ABSTIME expires.
 */
-static __always_inline int
-futex_lock_pi (unsigned int *futex_word, const struct timespec *abstime,
-	       int private)
-{
-  int err = lll_futex_timed_lock_pi (futex_word, abstime, private);
-  switch (err)
-    {
-    case 0:
-    case -EAGAIN:
-    case -EINTR:
-    case -ETIMEDOUT:
-    case -ESRCH:
-    case -EDEADLK:
-    case -EINVAL: /* This indicates either state corruption or that the kernel
-		     found a waiter on futex address which is waiting via
-		     FUTEX_WAIT or FUTEX_WAIT_BITSET.  This is reported on
-		     some futex_lock_pi usage (pthread_mutex_timedlock for
-		     instance).  */
-      return -err;
-
-    case -EFAULT: /* Must have been caused by a glibc or application bug.  */
-    case -ENOSYS: /* Must have been caused by a glibc bug.  */
-    /* No other errors are documented at this time.  */
-    default:
-      futex_fatal_error ();
-    }
-}
-
 static __always_inline int
 futex_lock_pi64 (int *futex_word, const struct __timespec64 *abstime,
                  int private)