#include "wait.h" #include "irq.h" #include "kthread.h" #include "list.h" int wake_up(struct wait_queue *wq) { struct kthread *th; uint32_t flags; disable_IRQs(flags); list_collapse(wq->thread, th) { kthreadAddThread(th); } restore_IRQs(flags); return 0; } int wait(struct wait_queue *wq) { struct kthread *current; uint32_t flags; disable_IRQs(flags); current = getCurrentThread(); kthreadUnsched(current); list_add_tail(wq->thread, current); current->state = WAITING; kthreadSaveAndYield(current); restore_IRQs(flags); return 0; }