Andrew Geissler | 4b7c115 | 2020-11-30 19:55:29 -0600 | [diff] [blame] | 1 | From ddcc8a9f7e0f0bfee96f2f0a0c10f21f9fa9b05d Mon Sep 17 00:00:00 2001 |
| 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Sun, 15 Nov 2020 15:02:28 -0800 |
| 4 | Subject: [PATCH] folly: Use SYS_futex for syscall |
| 5 | |
| 6 | glibc defines SYS_futex and on newer 32bit CPUs like RISCV-32, arc there |
| 7 | is no 32bit time_t therefore define SYS_futex in terms of SYS_futex_time64 |
| 8 | |
| 9 | Upstream-Status: Submitted [https://github.com/facebook/rocksdb/pull/7676] |
| 10 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 11 | --- |
| 12 | third-party/folly/folly/detail/Futex.cpp | 10 ++++++++-- |
| 13 | 1 file changed, 8 insertions(+), 2 deletions(-) |
| 14 | |
| 15 | diff --git a/third-party/folly/folly/detail/Futex.cpp b/third-party/folly/folly/detail/Futex.cpp |
| 16 | index 62d6ea2b2..a914a8c73 100644 |
| 17 | --- a/third-party/folly/folly/detail/Futex.cpp |
| 18 | +++ b/third-party/folly/folly/detail/Futex.cpp |
| 19 | @@ -48,9 +48,15 @@ namespace { |
| 20 | #define FUTEX_CLOCK_REALTIME 256 |
| 21 | #endif |
| 22 | |
| 23 | +/// Newer 32bit CPUs eg. RISCV-32 are defaulting to 64bit time_t from get go and |
| 24 | +/// therefore do not define __NR_futex |
| 25 | +#if !defined(SYS_futex) && defined(SYS_futex_time64) |
| 26 | +# define SYS_futex SYS_futex_time64 |
| 27 | +#endif |
| 28 | + |
| 29 | int nativeFutexWake(const void* addr, int count, uint32_t wakeMask) { |
| 30 | long rv = syscall( |
| 31 | - __NR_futex, |
| 32 | + SYS_futex, |
| 33 | addr, /* addr1 */ |
| 34 | FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG, /* op */ |
| 35 | count, /* val */ |
| 36 | @@ -112,7 +118,7 @@ FutexResult nativeFutexWaitImpl( |
| 37 | // Unlike FUTEX_WAIT, FUTEX_WAIT_BITSET requires an absolute timeout |
| 38 | // value - http://locklessinc.com/articles/futex_cheat_sheet/ |
| 39 | long rv = syscall( |
| 40 | - __NR_futex, |
| 41 | + SYS_futex, |
| 42 | addr, /* addr1 */ |
| 43 | op, /* op */ |
| 44 | expected, /* val */ |
| 45 | -- |
| 46 | 2.29.2 |
| 47 | |