]> xenbits.xensource.com Git - unikraft/libs/libcxx.git/commitdiff
Use unikraft syscalls for futex
authorMarco Schlumpp <marco.schlumpp@gmail.com>
Thu, 6 Apr 2023 16:56:16 +0000 (18:56 +0200)
committerUnikraft <monkey@unikraft.io>
Thu, 1 Jun 2023 19:30:34 +0000 (19:30 +0000)
Signed-off-by: Marco Schlumpp <marco@unikraft.io>
Signed-off-by: Andrei Tatar <andrei@unikraft.io>
Reviewed-by: Stefan Jumarea <stefanjumarea02@gmail.com>
Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com>
Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
Approved-by: Eduard Vintilă <eduard.vintila47@gmail.com>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #28

patches/0000-atomic_futex_syscall.patch [new file with mode: 0644]

diff --git a/patches/0000-atomic_futex_syscall.patch b/patches/0000-atomic_futex_syscall.patch
new file mode 100644 (file)
index 0000000..76d05ec
--- /dev/null
@@ -0,0 +1,27 @@
+diff --git a/src/atomic.cpp b/src/atomic.cpp
+--- a/src/atomic.cpp   
++++ b/src/atomic.cpp   (date 1680772930656)
+@@ -19,6 +19,7 @@
+ #include <unistd.h>
+ #include <linux/futex.h>
+ #include <sys/syscall.h>
++#include <uk/syscall.h>
+ // libc++ uses SYS_futex as a universal syscall name. However, on 32 bit architectures
+ // with a 64 bit time_t, we need to specify SYS_futex_time64.
+@@ -45,13 +46,13 @@
+                                               __cxx_contention_t __val)
+ {
+     static constexpr timespec __timeout = { 2, 0 };
+-    syscall(SYS_futex, __ptr, FUTEX_WAIT_PRIVATE, __val, &__timeout, 0, 0);
++    uk_syscall_static(SYS_futex, __ptr, FUTEX_WAIT_PRIVATE, __val, &__timeout, 0, 0);
+ }
+ static void __libcpp_platform_wake_by_address(__cxx_atomic_contention_t const volatile* __ptr,
+                                               bool __notify_one)
+ {
+-    syscall(SYS_futex, __ptr, FUTEX_WAKE_PRIVATE, __notify_one ? 1 : INT_MAX, 0, 0, 0);
++    uk_syscall_static(SYS_futex, __ptr, FUTEX_WAKE_PRIVATE, __notify_one ? 1 : INT_MAX, 0, 0, 0);
+ }
+ #elif defined(__APPLE__) && defined(_LIBCPP_USE_ULOCK)