]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
nptl: Replace lll_timedwait with __futex_abstimed_wait64
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Sun, 22 Nov 2020 21:55:03 +0000 (18:55 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 25 Nov 2020 13:43:18 +0000 (10:43 -0300)
Checked with x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
nptl/Makefile
nptl/lll_timedlock_wait.c [deleted file]
nptl/pthread_mutex_lock.c
sysdeps/nptl/lowlevellock.h

index 74ab758c12beb2bf9c9bdad55b761c6240e75eb6..968768d33bea155a31f8cf9275b936527684b40d 100644 (file)
@@ -147,7 +147,6 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \
                      pt-longjmp pt-cleanup\
                      cancellation \
                      lowlevellock \
-                     lll_timedlock_wait \
                      pt-fork pt-fcntl \
                      $(pthread-compat-wrappers) \
                      pt-raise pt-system \
diff --git a/nptl/lll_timedlock_wait.c b/nptl/lll_timedlock_wait.c
deleted file mode 100644 (file)
index eabdca7..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Timed low level locking for pthread library.  Generic futex-using version.
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <atomic.h>
-#include <errno.h>
-#include <lowlevellock.h>
-#include <sys/time.h>
-#include <time.h>
-
-
-int
-__lll_clocklock_wait (int *futex, int val, clockid_t clockid,
-                     const struct timespec *abstime, int private)
-{
-  struct timespec ts, *tsp = NULL;
-
-  if (abstime != NULL)
-    {
-      /* Reject invalid timeouts.  */
-      if (! valid_nanoseconds (abstime->tv_nsec))
-        return EINVAL;
-
-      /* Get the current time. This can only fail if clockid is not valid.  */
-      if (__glibc_unlikely (__clock_gettime (clockid, &ts) != 0))
-        return EINVAL;
-
-      /* Compute relative timeout.  */
-      ts.tv_sec = abstime->tv_sec - ts.tv_sec;
-      ts.tv_nsec = abstime->tv_nsec - ts.tv_nsec;
-      if (ts.tv_nsec < 0)
-        {
-         ts.tv_nsec += 1000000000;
-         --ts.tv_sec;
-        }
-
-      if (ts.tv_sec < 0)
-        return ETIMEDOUT;
-
-      tsp = &ts;
-    }
-
-  /* If *futex == val, wait until woken or timeout.  */
-  lll_futex_timed_wait (futex, val, tsp, private);
-
-  return 0;
-}
index 0439002454489b6ca28308013f0a54805326baee..1f137f6201a49be824fdd88b3a663a8063ffde0b 100644 (file)
@@ -425,8 +425,8 @@ __pthread_mutex_lock_full (pthread_mutex_t *mutex)
 
                /* Delay the thread indefinitely.  */
                while (1)
-                 lll_timedwait (&(int){0}, 0, 0 /* ignored */, NULL,
-                                private);
+                 __futex_abstimed_wait64 (&(unsigned int){0}, 0,
+                                          0 /* ignored */, NULL, private);
              }
 
            oldval = mutex->__data.__lock;
index 68b3be8819115f2d82482eb8a5948a7b43781e2a..3de87d31a9e6259f8d289274d372c86cab927667 100644 (file)
@@ -122,38 +122,6 @@ extern void __lll_lock_wait (int *futex, int private) attribute_hidden;
 #define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
 
 
-extern int __lll_clocklock_wait (int *futex, int val, clockid_t,
-                                const struct timespec *,
-                                int private) attribute_hidden;
-
-#define lll_timedwait(futex, val, clockid, abstime, private)           \
-  __lll_clocklock_wait (futex, val, clockid, abstime, private)
-
-/* As __lll_lock, but with an absolute timeout measured against the clock
-   specified in CLOCKID.  If the timeout occurs then return ETIMEDOUT. If
-   ABSTIME is invalid, return EINVAL.  */
-#define __lll_clocklock(futex, clockid, abstime, private)       \
-  ({                                                            \
-    int *__futex = (futex);                                     \
-    int __val = 0;                                              \
-                                                                \
-    if (__glibc_unlikely                                        \
-        (atomic_compare_and_exchange_bool_acq (__futex, 1, 0))) \
-      {                                                                \
-       while (atomic_exchange_acq (futex, 2) != 0)             \
-         {                                                     \
-           __val = __lll_clocklock_wait (__futex, 2, clockid,  \
-                                         abstime, private);    \
-           if (__val == EINVAL || __val == ETIMEDOUT)          \
-             break;                                            \
-         }                                                     \
-      }                                                                \
-    __val;                                                      \
-  })
-#define lll_clocklock(futex, clockid, abstime, private)         \
-  __lll_clocklock (&(futex), clockid, abstime, private)
-
-
 /* This is an expression rather than a statement even though its value is
    void, so that it can be used in a comma expression or as an expression
    that's cast to void.  */