summaryrefslogtreecommitdiff
path: root/kern/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'kern/kernel.c')
-rw-r--r--kern/kernel.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/kern/kernel.c b/kern/kernel.c
index 07a0f660..93c0c19c 100644
--- a/kern/kernel.c
+++ b/kern/kernel.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012 Richard Braun.
+ * Copyright (c) 2011, 2012, 2013 Richard Braun.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,12 +27,17 @@ kernel_main(void)
{
assert(!cpu_intr_enabled());
+ /* Enable interrupts to allow inter-processor pmap updates */
+ cpu_intr_enable();
+
+ /* Initialize the kernel */
task_setup();
thread_setup();
- cpu_intr_enable();
- cpu_mp_setup();
+ /* Rendezvous with APs */
+ cpu_mp_sync();
+ /* Run the scheduler */
thread_run();
/* Never reached */
@@ -43,9 +48,16 @@ kernel_ap_main(void)
{
assert(!cpu_intr_enabled());
+ /*
+ * Enable interrupts to allow inter-processor pmap updates while the BSP
+ * is initializing the kernel.
+ */
cpu_intr_enable();
+
+ /* Wait for the BSP to complete kernel initialization */
cpu_ap_sync();
+ /* Run the scheduler */
thread_run();
/* Never reached */