diff --git a/sched/thread.c b/sched/thread.c index 8786a92..781847b 100644 --- a/sched/thread.c +++ b/sched/thread.c @@ -127,6 +127,17 @@ int thread_priority(struct thread *thr) return thr->tr_prio; } +void thread_awaken(struct thread *thr) +{ + struct runqueue *rq = thr->tr_rq; + if (!rq) { + rq = cpu_rq(this_cpu()); + } + + thr->tr_state = THREAD_READY; + rq_enqueue(rq, thr); +} + struct thread *create_kernel_thread(void (*fn)(void)) { struct task *kernel = kernel_task(); diff --git a/sched/wait.c b/sched/wait.c index 90249c7..63b62a6 100644 --- a/sched/wait.c +++ b/sched/wait.c @@ -36,15 +36,10 @@ void wakeup_queue(struct waitqueue *q) spin_lock_irqsave(&q->wq_lock, &flags); struct queue_entry *ent = queue_pop_front(&q->wq_waiters); while (ent) { - struct wait_item *waiter = QUEUE_CONTAINER(struct wait_item, w_entry, ent); + struct wait_item *waiter + = QUEUE_CONTAINER(struct wait_item, w_entry, ent); struct thread *thr = waiter->w_thread; - struct runqueue *rq = thr->tr_rq; - if (!rq) { - rq = cpu_rq(this_cpu()); - } - - thr->tr_state = THREAD_READY; - rq_enqueue(rq, thr); + thread_awaken(thr); ent = queue_pop_front(&q->wq_waiters); } @@ -57,8 +52,9 @@ void wakeup_one(struct waitqueue *q) unsigned long flags; spin_lock_irqsave(&q->wq_lock, &flags); struct queue_entry *ent = queue_pop_front(&q->wq_waiters); - if(ent) { - struct wait_item *waiter = QUEUE_CONTAINER(struct wait_item, w_entry, ent); + if (ent) { + struct wait_item *waiter + = QUEUE_CONTAINER(struct wait_item, w_entry, ent); struct thread *thr = waiter->w_thread; struct runqueue *rq = thr->tr_rq; if (!rq) {