diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-12-22 21:29:47 +0100 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-12-25 23:54:06 +0100 |
commit | 4a8683ea686c1c6fb11a2641a0e7a2e5fe8ca9f5 (patch) | |
tree | dc979d10421e7afd54cd2f8a8fcce94b6a3a3fbe /Kernel/Process.h | |
parent | 4b8b100b83eb07dfcc2eb9f986568a712448a05a (diff) | |
download | serenity-4a8683ea686c1c6fb11a2641a0e7a2e5fe8ca9f5.zip |
Kernel+LibPthread+LibC: Add a naive futex and use it for pthread_cond_t
This patch implements a simple version of the futex (fast userspace
mutex) API in the kernel and uses it to make the pthread_cond_t API's
block instead of busily sched_yield().
An arbitrary userspace address is passed to the kernel as a "token"
that identifies the futex and you can then FUTEX_WAIT and FUTEX_WAKE
that specific userspace address.
FUTEX_WAIT corresponds to pthread_cond_wait() and FUTEX_WAKE is used
for pthread_cond_signal() and pthread_cond_broadcast().
I'm pretty sure I'm missing something in this implementation, but it's
hopefully okay for a start. :^)
Diffstat (limited to 'Kernel/Process.h')
-rw-r--r-- | Kernel/Process.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/Kernel/Process.h b/Kernel/Process.h index 468157750f..191f72fe9b 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -233,6 +233,7 @@ public: int sys$profiling_enable(pid_t); int sys$profiling_disable(pid_t); void* sys$get_kernel_info_page(); + int sys$futex(const Syscall::SC_futex_params*); static void initialize(); @@ -391,6 +392,9 @@ private: u64 m_alarm_deadline { 0 }; int m_icon_id { -1 }; + + WaitQueue& futex_queue(i32*); + HashMap<u32, OwnPtr<WaitQueue>> m_futex_queues; }; class ProcessInspectionHandle { |