From e77221a523bc07abb4a0141543f6d52e705bd831 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Fri, 20 Nov 2020 10:58:51 -0300 Subject: [PATCH] nptl: Extend __futex_abstimed_wait_cancelable64 comment 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 --- sysdeps/nptl/futex-internal.c | 8 ++------ sysdeps/nptl/futex-internal.h | 14 +++++++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sysdeps/nptl/futex-internal.c b/sysdeps/nptl/futex-internal.c index 457cd3cd69..e4a14b477c 100644 --- a/sysdeps/nptl/futex-internal.c +++ b/sysdeps/nptl/futex-internal.c @@ -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) diff --git a/sysdeps/nptl/futex-internal.h b/sysdeps/nptl/futex-internal.h index d5f13d15fb..8c1d592308 100644 --- a/sysdeps/nptl/futex-internal.h +++ b/sysdeps/nptl/futex-internal.h @@ -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,