[LTP] [PATCH v1] Futex_waitv: Convert 32bit timespec struct to 64bit version for 32bit compatibility mode
Andrea Cervesato
andrea.cervesato@suse.com
Thu Feb 8 13:50:35 CET 2024
Hi!
On 12/4/23 00:51, Wei Gao via ltp wrote:
> 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 | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/testcases/kernel/syscalls/futex/futex2test.h b/testcases/kernel/syscalls/futex/futex2test.h
> index ce97f47c1..f9a031e11 100644
> --- a/testcases/kernel/syscalls/futex/futex2test.h
> +++ b/testcases/kernel/syscalls/futex/futex2test.h
> @@ -13,6 +13,13 @@
> #include "lapi/syscalls.h"
> #include "futextest.h"
>
> +#if !defined(__LP64__)
Here you can use "lapi/abisize.h" header. The TST_ABI32 definition is
provided when we are running on a 32-bits system.
> +struct timespec64 {
> + int64_t tv_sec;
> + int64_t tv_nsec;
> +};
> +#endif
> +
> /**
> * futex_waitv - Wait at multiple futexes, wake on any
> * @waiters: Array of waiters
> @@ -24,7 +31,16 @@ static inline int futex_waitv(volatile struct futex_waitv *waiters,
> unsigned long nr_waiters, unsigned long flags,
> struct timespec *timo, clockid_t clockid)
> {
> +#if !defined(__LP64__)
> + 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 */
Regards,
Andrea Cervesato
More information about the ltp
mailing list