thread: move thread awaken functionality to a dedicated function

This commit is contained in:
2026-02-19 19:17:38 +00:00
parent 9424e7bcd6
commit b2dbb88778
2 changed files with 17 additions and 10 deletions

View File

@@ -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();

View File

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