You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.5 KiB
35 lines
1.5 KiB
Upstream x86_64 uses the generic lll_futex_timed_wait_bitset, but for |
|
rhel-7 we have not yet backported the larger generic futex cleanups. |
|
To keep x86_64 using the tested code paths we add a generic |
|
lll_futex_timed_wait_bitset. We do not do the same for i686, where we |
|
let the code use the lll_futex_timed_wait fallback. For i686 it would |
|
be harder to add lll_futex_timed_wait_bitset because it requires more |
|
complex 6-argument syscall handling backports, so we do not do that. |
|
|
|
Not needed upstream. |
|
|
|
Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h |
|
=================================================================== |
|
--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h |
|
+++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h |
|
@@ -223,6 +223,20 @@ LLL_STUB_UNWIND_INFO_END |
|
__status; \ |
|
}) |
|
|
|
+#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \ |
|
+ ({ \ |
|
+ INTERNAL_SYSCALL_DECL (__err); \ |
|
+ long int __ret; \ |
|
+ int __op = FUTEX_WAIT_BITSET | clockbit; \ |
|
+ \ |
|
+ __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ |
|
+ __lll_private_flag (__op, private), \ |
|
+ (val), (timespec), NULL /* Unused. */, \ |
|
+ FUTEX_BITSET_MATCH_ANY); \ |
|
+ (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (__ret, __err)) \ |
|
+ ? -INTERNAL_SYSCALL_ERRNO (__ret, __err) : 0); \ |
|
+ }) |
|
+ |
|
|
|
#define lll_futex_wake(futex, nr, private) \ |
|
({ \
|
|
|