Skip to content

Commit 57331a7

Browse files
Opt-in busywait mode for futexes
1 parent f1c557c commit 57331a7

File tree

16 files changed

+191
-5
lines changed

16 files changed

+191
-5
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@ LIBC_TOP_HALF_MUSL_SOURCES += \
369369
thread/sem_trywait.c \
370370
thread/sem_wait.c \
371371
thread/wasm32/wasi_thread_start.s \
372+
thread/wasm32/__wasilibc_busywait.c \
372373
)
373374
endif
374375
ifeq ($(THREAD_MODEL), single)

expected/wasm32-wasip1-threads/defined-symbols.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,13 +362,16 @@ __wasilibc_cwd_lock
362362
__wasilibc_cwd_unlock
363363
__wasilibc_deinitialize_environ
364364
__wasilibc_dttoif
365+
__wasilibc_enable_futex_busywait_on_current_thread
365366
__wasilibc_ensure_environ
366367
__wasilibc_environ
367368
__wasilibc_fd_renumber
368369
__wasilibc_find_abspath
369370
__wasilibc_find_relpath
370371
__wasilibc_find_relpath_alloc
371372
__wasilibc_futex_wait
373+
__wasilibc_futex_wait_atomic_wait
374+
__wasilibc_futex_wait_maybe_busy
372375
__wasilibc_get_environ
373376
__wasilibc_iftodt
374377
__wasilibc_initialize_environ
@@ -400,6 +403,7 @@ __wasilibc_rmdirat
400403
__wasilibc_stat
401404
__wasilibc_tell
402405
__wasilibc_unlinkat
406+
__wasilibc_use_busy_futex
403407
__wasilibc_utimens
404408
__wasm_call_dtors
405409
__wcscoll_l

expected/wasm32-wasip1-threads/include-all.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@
167167
#include <utime.h>
168168
#include <values.h>
169169
#include <wasi/api.h>
170+
#include <wasi/libc-busywait.h>
170171
#include <wasi/libc-environ.h>
171172
#include <wasi/libc-find-relpath.h>
172173
#include <wasi/libc-nocwd.h>

expected/wasm32-wasip1-threads/predefined-macros.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3091,6 +3091,7 @@
30913091
#define __va_copy(d,s) __builtin_va_copy(d,s)
30923092
#define __wasi__ 1
30933093
#define __wasi_api_h
3094+
#define __wasi_libc_busywait_h
30943095
#define __wasi_libc_environ_h
30953096
#define __wasi_libc_find_relpath_h
30963097
#define __wasi_libc_h

expected/wasm32-wasip1/include-all.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@
167167
#include <utime.h>
168168
#include <values.h>
169169
#include <wasi/api.h>
170+
#include <wasi/libc-busywait.h>
170171
#include <wasi/libc-environ.h>
171172
#include <wasi/libc-find-relpath.h>
172173
#include <wasi/libc-nocwd.h>

expected/wasm32-wasip1/predefined-macros.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3084,6 +3084,7 @@
30843084
#define __va_copy(d,s) __builtin_va_copy(d, s)
30853085
#define __wasi__ 1
30863086
#define __wasi_api_h
3087+
#define __wasi_libc_busywait_h
30873088
#define __wasi_libc_environ_h
30883089
#define __wasi_libc_find_relpath_h
30893090
#define __wasi_libc_h

expected/wasm32-wasip2/include-all.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@
168168
#include <utime.h>
169169
#include <values.h>
170170
#include <wasi/api.h>
171+
#include <wasi/libc-busywait.h>
171172
#include <wasi/libc-environ.h>
172173
#include <wasi/libc-find-relpath.h>
173174
#include <wasi/libc-nocwd.h>

expected/wasm32-wasip2/predefined-macros.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3236,6 +3236,7 @@
32363236
#define __va_copy(d,s) __builtin_va_copy(d, s)
32373237
#define __wasi__ 1
32383238
#define __wasi_api_h
3239+
#define __wasi_libc_busywait_h
32393240
#define __wasi_libc_environ_h
32403241
#define __wasi_libc_find_relpath_h
32413242
#define __wasi_libc_h

libc-bottom-half/headers/public/wasi/libc.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ int __wasilibc_rename_oldat(int olddirfd, const char *oldpath, const char *newpa
6464
int __wasilibc_rename_newat(const char *oldpath, int newdirfd, const char *newpath)
6565
__attribute__((__warn_unused_result__));
6666

67+
/// Enable busywait in futex on current thread.
68+
void __wasilibc_enable_futex_busywait_on_current_thread(void);
69+
6770
#ifdef __cplusplus
6871
}
6972
#endif
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#ifndef __wasi_libc_busywait_h
2+
#define __wasi_libc_busywait_h
3+
4+
#ifdef __cplusplus
5+
extern "C" {
6+
#endif
7+
8+
/// Enable busywait in futex on current thread.
9+
void __wasilibc_enable_futex_busywait_on_current_thread(void);
10+
11+
#ifdef __cplusplus
12+
}
13+
#endif
14+
15+
#endif

0 commit comments

Comments
 (0)