kernel: finish implementation of private and shared futexes

This commit is contained in:
2026-03-18 20:57:51 +00:00
parent b774415f64
commit 2a1a0cf14d
10 changed files with 254 additions and 29 deletions

View File

@@ -100,3 +100,6 @@ SYSCALL_GATE vm_controller_supply_pages SYS_VM_CONTROLLER_SUPPLY_PAGES 6
SYSCALL_GATE kern_object_wait SYS_KERN_OBJECT_WAIT 2
SYSCALL_GATE futex_wait SYS_FUTEX_WAIT 3
SYSCALL_GATE futex_wake SYS_FUTEX_WAKE 3

View File

@@ -0,0 +1,16 @@
#ifndef MANGO_FUTEX_H_
#define MANGO_FUTEX_H_
#include <mango/status.h>
#include <mango/types.h>
extern kern_status_t futex_wait(
kern_futex_t *futex,
kern_futex_t new_val,
unsigned int flags);
extern kern_status_t futex_wake(
kern_futex_t *futex,
unsigned int nr_waiters,
unsigned int flags);
#endif

View File

@@ -41,5 +41,7 @@
#define SYS_VM_CONTROLLER_CREATE_OBJECT 0x25u
#define SYS_VM_CONTROLLER_DETACH_OBJECT 0x26u
#define SYS_VM_CONTROLLER_SUPPLY_PAGES 0x27u
#define SYS_FUTEX_WAIT 0x28u
#define SYS_FUTEX_WAKE 0x29u
#endif

View File

@@ -44,6 +44,13 @@
#define PAGE_REQUEST_DIRTY 0x02u
#define PAGE_REQUEST_DETACH 0x03u
/* futex special values */
#define FUTEX_WAKE_ALL ((size_t)-1)
/* futex flags */
#define FUTEX_PRIVATE 0x01u
#define FUTEX_SHARED 0x02u
#define IOVEC(p, len) \
{ \
.io_base = (virt_addr_t)(p), .io_len = (len), \