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.
36 lines
1.5 KiB
36 lines
1.5 KiB
6 years ago
|
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) \
|
||
|
({ \
|