kernel: finish implementation of private and shared futexes
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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), \
|
||||
|
||||
Reference in New Issue
Block a user