diff options
author | Richard Braun <rbraun@sceen.net> | 2012-12-12 21:56:44 +0100 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2012-12-12 21:56:44 +0100 |
commit | 51bff7b18de9329d7bd77324cc597e72173fae74 (patch) | |
tree | 779b279c8ccb9f1d91b4ee8055718ae62771c8a1 /kern/kernel.c | |
parent | 36cce230ead886a82521dd6988e2fe120eeef3fc (diff) |
kern/thread: support multiprocessor scheduling
In practice, this merely means an idle thread now exists for each CPU,
and threads can be preempted and rescheduled on each of them. There is
currently no migration between processors.
Diffstat (limited to 'kern/kernel.c')
-rw-r--r-- | kern/kernel.c | 22 |
1 files changed, 3 insertions, 19 deletions
diff --git a/kern/kernel.c b/kern/kernel.c index 70cc8c71..760f68e8 100644 --- a/kern/kernel.c +++ b/kern/kernel.c @@ -22,31 +22,16 @@ #include <kern/thread.h> #include <machine/cpu.h> -static void __init -kernel_setup(void *arg) -{ - (void)arg; - - for (;;) - cpu_idle(); -} - void __init kernel_main(void) { - struct thread *thread; - int error; - assert(!cpu_intr_enabled()); task_setup(); thread_setup(); - cpu_mp_setup(); - - error = thread_create(&thread, "core", kernel_task, kernel_setup, NULL); - if (error) - panic("kernel: unable to create kernel thread"); + /* Interrupts are enabled by this call */ + cpu_mp_setup(); thread_run(); @@ -58,8 +43,7 @@ kernel_ap_main(void) { assert(cpu_intr_enabled()); - for (;;) - cpu_idle(); + thread_run(); /* Never reached */ } |