Message ID | 20240209012657.10797-1-wegao@suse.com |
---|---|
State | Accepted |
Headers | show |
Series | [v2] Futex_waitv: Convert 32bit timespec struct to 64bit version for 32bit compatibility mode | expand |
Hi! LGTM Reviewed-by: Andrea Cervesato <andrea.cervesato.suse.com> On 2/9/24 02:26, 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 | 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 */
Hi Wei, Andrea, merged (with some Suggested-by: tags), thanks! Kind regards, Petr
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 */
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(+)