[PATCH 1/2] Linux: Add futex_waitv
André Almeida
andrealmeid@igalia.com
Fri Aug 14 18:36:11 GMT 2026
This syscall can wait on multiple futexes at the same time, and wake up on
any.
Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
include/sys/futex.h | 4 ++++
sysdeps/unix/sysv/linux/Makefile | 2 ++
sysdeps/unix/sysv/linux/futex_waitv.c | 32 +++++++++++++++++++++++++++
sysdeps/unix/sysv/linux/sys/futex.h | 24 ++++++++++++++++++++
4 files changed, 62 insertions(+)
create mode 100644 include/sys/futex.h
create mode 100644 sysdeps/unix/sysv/linux/futex_waitv.c
create mode 100644 sysdeps/unix/sysv/linux/sys/futex.h
diff --git a/include/sys/futex.h b/include/sys/futex.h
new file mode 100644
index 0000000000..8f0f56c58c
--- /dev/null
+++ b/include/sys/futex.h
@@ -0,0 +1,4 @@
+#ifndef _SYS_FUTEX_H
+#include_next <sys/futex.h>
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 14a56d5cc3..d3ccb57b59 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -74,6 +74,7 @@ sysdep_routines += \
eventfd_read \
eventfd_write \
fanotify_mark \
+ futex_waitv \
fxstat \
fxstat64 \
fxstatat \
@@ -169,6 +170,7 @@ sysdep_headers += \
sys/eventfd.h \
sys/fanotify.h \
sys/fsuid.h \
+ sys/futex.h \
sys/inotify.h \
sys/kd.h \
sys/klog.h \
diff --git a/sysdeps/unix/sysv/linux/futex_waitv.c b/sysdeps/unix/sysv/linux/futex_waitv.c
new file mode 100644
index 0000000000..b77df2f2cd
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/futex_waitv.c
@@ -0,0 +1,32 @@
+/* futex_waitv -- Wait on multiple futexes. Linux version.
+ Copyright (C) 2020-2026 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <time.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/futex.h>
+
+#include <sysdep-cancel.h>
+
+int
+futex_waitv (struct futex_waitv *waiters, unsigned int nr_waiters,
+ unsigned int flags, const struct __timespec64 *timeout,
+ clockid_t clockid)
+{
+ return SYSCALL_CANCEL (futex_waitv, waiters, nr_waiters, flags, &timeout, clockid);
+}
diff --git a/sysdeps/unix/sysv/linux/sys/futex.h b/sysdeps/unix/sysv/linux/sys/futex.h
new file mode 100644
index 0000000000..89780e9e5a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sys/futex.h
@@ -0,0 +1,24 @@
+#ifndef _SYS_FUTEX_H
+#define _SYS_FUTEX_H 1
+
+#include <sys/types.h>
+#include <stdint.h>
+#include <struct___timespec64.h>
+
+#define FUTEX2_SIZE_U8 0x00
+#define FUTEX2_SIZE_U16 0x01
+#define FUTEX2_SIZE_U32 0x02
+#define FUTEX2_SIZE_U64 0x03
+
+struct futex_waitv {
+ uint64_t val;
+ uint64_t uaddr;
+ uint32_t flags;
+ uint32_t __reserved;
+};
+
+extern int
+futex_waitv (struct futex_waitv *waiters, unsigned int nr_waiters,
+ unsigned int flags, const struct __timespec64 *timeout,
+ clockid_t clockid);
+#endif
--
2.55.0
More information about the Libc-alpha
mailing list