]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
nptl: Extend __futex_abstimed_wait_cancelable64 comment
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 20 Nov 2020 13:58:51 +0000 (10:58 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 25 Nov 2020 13:43:17 +0000 (10:43 -0300)
And add a small optimization to avoid setting the operation for the
32-bit time fallback operation.

Checked on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
sysdeps/nptl/futex-internal.c
sysdeps/nptl/futex-internal.h

index 457cd3cd6900c45ed3f73ba0b8562013e2f3413f..e4a14b477cceba34b48028f6628f89fc12092bd6 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef __ASSUME_TIME64_SYSCALLS
 static int
 __futex_abstimed_wait_cancelable32 (unsigned int* futex_word,
-                                    unsigned int expected, clockid_t clockid,
+                                    unsigned int expected, int op,
                                     const struct __timespec64* abstime,
                                     int private)
 {
@@ -39,10 +39,6 @@ __futex_abstimed_wait_cancelable32 (unsigned int* futex_word,
       pts32 = &ts32;
     }
 
-  unsigned int clockbit = (clockid == CLOCK_REALTIME)
-         ? FUTEX_CLOCK_REALTIME : 0;
-  int op = __lll_private_flag (FUTEX_WAIT_BITSET | clockbit, private);
-
   return INTERNAL_SYSCALL_CANCEL (futex, futex_word, op, expected,
                                   pts32, NULL /* Unused.  */,
                                   FUTEX_BITSET_MATCH_ANY);
@@ -119,7 +115,7 @@ __futex_abstimed_wait_cancelable64 (unsigned int* futex_word,
 #ifndef __ASSUME_TIME64_SYSCALLS
   if (err == -ENOSYS)
     err = __futex_abstimed_wait_cancelable32 (futex_word, expected,
-                                              clockid, abstime, private);
+                                              op, abstime, private);
 #endif
 
   switch (err)
index d5f13d15fbe1def06b27215cde76f09e5a652e14..8c1d592308dd5b76c924d7aac0ac1068bc2f2706 100644 (file)
@@ -390,9 +390,17 @@ futex_unlock_pi (unsigned int *futex_word, int private)
     }
 }
 
-/* The futex_abstimed_wait_cancelable64 has been moved to a separate file
-   to avoid problems with exhausting available registers on some architectures
-   - e.g. on m68k architecture.  */
+/* Like futex_wait, but will eventually time out (i.e., stop being blocked)
+   after the duration of time provided (i.e., ABSTIME) has passed using the
+   clock specified by CLOCKID (currently only CLOCK_REALTIME and
+   CLOCK_MONOTONIC, the ones support by lll_futex_supported_clockid). ABSTIME
+   can also equal NULL, in which case this function behaves equivalent to
+   futex_wait.
+
+   Returns the same values as futex_wait under those same conditions;
+   additionally, returns ETIMEDOUT if the timeout expired.
+
+   The call acts as a cancellation entrypoint.  */
 int
 __futex_abstimed_wait_cancelable64 (unsigned int* futex_word,
                                     unsigned int expected, clockid_t clockid,