summaryrefslogtreecommitdiff
path: root/kern/kernel.c
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-12-12 21:56:44 +0100
committerRichard Braun <rbraun@sceen.net>2012-12-12 21:56:44 +0100
commit51bff7b18de9329d7bd77324cc597e72173fae74 (patch)
tree779b279c8ccb9f1d91b4ee8055718ae62771c8a1 /kern/kernel.c
parent36cce230ead886a82521dd6988e2fe120eeef3fc (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.c22
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 */
}