xref: /linux/tools/testing/selftests/futex/include/futex2test.h (revision 8b4a5c2497fad653bc54ddb037d38eb5bf835857)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Futex2 library addons for futex tests
4  *
5  * Copyright 2021 Collabora Ltd.
6  */
7 #include <stdint.h>
8 
9 #define u64_to_ptr(x) ((void *)(uintptr_t)(x))
10 
11 #ifndef __NR_futex_waitv
12 #define __NR_futex_waitv 449
13 struct futex_waitv {
14 	__u64 val;
15 	__u64 uaddr;
16 	__u32 flags;
17 	__u32 __reserved;
18 };
19 #endif
20 
21 #ifndef FUTEX2_SIZE_U32
22 #define FUTEX2_SIZE_U32 0x02
23 #endif
24 
25 #ifndef FUTEX_32
26 #define FUTEX_32 FUTEX2_SIZE_U32
27 #endif
28 
29 /**
30  * futex_waitv - Wait at multiple futexes, wake on any
31  * @waiters:    Array of waiters
32  * @nr_waiters: Length of waiters array
33  * @flags: Operation flags
34  * @timo:  Optional timeout for operation
35  */
36 static inline int futex_waitv(volatile struct futex_waitv *waiters, unsigned long nr_waiters,
37 			      unsigned long flags, struct timespec *timo, clockid_t clockid)
38 {
39 	return syscall(__NR_futex_waitv, waiters, nr_waiters, flags, timo, clockid);
40 }
41