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 <lukma@denx.de>
This commit is contained in:
Adhemerval Zanella 2020-11-20 10:58:51 -03:00
parent 9e92278ffa
commit e77221a523
2 changed files with 13 additions and 9 deletions

View File

@ -25,7 +25,7 @@
#ifndef __ASSUME_TIME64_SYSCALLS #ifndef __ASSUME_TIME64_SYSCALLS
static int static int
__futex_abstimed_wait_cancelable32 (unsigned int* futex_word, __futex_abstimed_wait_cancelable32 (unsigned int* futex_word,
unsigned int expected, clockid_t clockid, unsigned int expected, int op,
const struct __timespec64* abstime, const struct __timespec64* abstime,
int private) int private)
{ {
@ -39,10 +39,6 @@ __futex_abstimed_wait_cancelable32 (unsigned int* futex_word,
pts32 = &ts32; 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, return INTERNAL_SYSCALL_CANCEL (futex, futex_word, op, expected,
pts32, NULL /* Unused. */, pts32, NULL /* Unused. */,
FUTEX_BITSET_MATCH_ANY); FUTEX_BITSET_MATCH_ANY);
@ -119,7 +115,7 @@ __futex_abstimed_wait_cancelable64 (unsigned int* futex_word,
#ifndef __ASSUME_TIME64_SYSCALLS #ifndef __ASSUME_TIME64_SYSCALLS
if (err == -ENOSYS) if (err == -ENOSYS)
err = __futex_abstimed_wait_cancelable32 (futex_word, expected, err = __futex_abstimed_wait_cancelable32 (futex_word, expected,
clockid, abstime, private); op, abstime, private);
#endif #endif
switch (err) switch (err)

View 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 /* Like futex_wait, but will eventually time out (i.e., stop being blocked)
to avoid problems with exhausting available registers on some architectures after the duration of time provided (i.e., ABSTIME) has passed using the
- e.g. on m68k architecture. */ 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 int
__futex_abstimed_wait_cancelable64 (unsigned int* futex_word, __futex_abstimed_wait_cancelable64 (unsigned int* futex_word,
unsigned int expected, clockid_t clockid, unsigned int expected, clockid_t clockid,