summaryrefslogtreecommitdiff
path: root/Kernel/Process.h
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-12-22 21:29:47 +0100
committerAndreas Kling <awesomekling@gmail.com>2019-12-25 23:54:06 +0100
commit4a8683ea686c1c6fb11a2641a0e7a2e5fe8ca9f5 (patch)
treedc979d10421e7afd54cd2f8a8fcce94b6a3a3fbe /Kernel/Process.h
parent4b8b100b83eb07dfcc2eb9f986568a712448a05a (diff)
downloadserenity-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.h4
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 {