aboutsummaryrefslogtreecommitdiff
path: root/kernel/task/sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/task/sched.c')
-rw-r--r--kernel/task/sched.c10
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