1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:38:12 +00:00

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. :^)
This commit is contained in:
Andreas Kling 2019-12-22 21:29:47 +01:00
parent 4b8b100b83
commit 4a8683ea68
9 changed files with 99 additions and 55 deletions

View file

@ -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 {