diff options
Diffstat (limited to 'kernel/task/sched.c')
-rw-r--r-- | kernel/task/sched.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/task/sched.c b/kernel/task/sched.c index ceaf9bb..1ffd369 100644 --- a/kernel/task/sched.c +++ b/kernel/task/sched.c @@ -7,6 +7,8 @@ struct tcb_t* volatile current = 0; +static struct tcb_t* volatile idle = 0; + struct list_head ready = LIST_HEAD_INIT(ready); void* volatile kstack; @@ -17,6 +19,12 @@ void spawn(struct tcb_t* const tcb) { list_add_tail(&tcb->queue, &ready); } +void spawn_idle(struct tcb_t* const tcb) { + spawn(tcb); + list_del(&tcb->queue); + idle = tcb; +} + void yield(void) { cli(); context_save(); @@ -50,6 +58,6 @@ void schedule() { current = list_entry(ready.next, struct tcb_t, queue); list_move_tail(ready.next, &ready); } else { - panic(); + current = idle; } }
\ No newline at end of file |