[LTP] [PATCH v2] Futex_waitv: Convert 32bit timespec struct to 64bit version for 32bit compatibility mode
Wei Gao
wegao@suse.com
Fri Feb 9 02:26:57 CET 2024
Futex_waitv can not accept old_timespec32 struct, so userspace should
convert it from 32bit to 64bit before syscall in 32bit compatible mode.
Detail info you can refer following email thread:
https://lkml.org/lkml/2023/11/23/13
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/kernel/syscalls/futex/futex2test.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/testcases/kernel/syscalls/futex/futex2test.h b/testcases/kernel/syscalls/futex/futex2test.h
index ce97f47c1..a3cd0ef5c 100644
--- a/testcases/kernel/syscalls/futex/futex2test.h
+++ b/testcases/kernel/syscalls/futex/futex2test.h
@@ -12,6 +12,14 @@
#include <stdint.h>
#include "lapi/syscalls.h"
#include "futextest.h"
+#include "lapi/abisize.h"
+
+#ifdef TST_ABI32
+struct timespec64 {
+ int64_t tv_sec;
+ int64_t tv_nsec;
+};
+#endif
/**
* futex_waitv - Wait at multiple futexes, wake on any
@@ -24,7 +32,16 @@ static inline int futex_waitv(volatile struct futex_waitv *waiters,
unsigned long nr_waiters, unsigned long flags,
struct timespec *timo, clockid_t clockid)
{
+#ifdef TST_ABI32
+ struct timespec64 timo64 = {0};
+
+ timo64.tv_sec = timo->tv_sec;
+ timo64.tv_nsec = timo->tv_nsec;
+ return tst_syscall(__NR_futex_waitv, waiters, nr_waiters, flags, &timo64, clockid);
+#else
return tst_syscall(__NR_futex_waitv, waiters, nr_waiters, flags, timo, clockid);
+
+#endif
}
#endif /* _FUTEX2TEST_H */
--
2.35.3
More information about the ltp
mailing list