summaryrefslogtreecommitdiff
path: root/src/kernel/kernel.c
diff options
context:
space:
mode:
authorBrett Weiland <brett_weiland@bpcspace.com>2021-09-21 10:50:33 -0500
committerBrett Weiland <brett_weiland@bpcspace.com>2021-09-21 10:50:33 -0500
commitcf7cd8be60c254b44b444c97dcb238d7cf3afd4c (patch)
treee86fe62827f4dbc5f1b6b74cf7bd89c78e797711 /src/kernel/kernel.c
parent907fb823bf8329066b1bcff60ea6c4faa54a3642 (diff)
palloc smp safe (testing required, NOT pfree)
Diffstat (limited to 'src/kernel/kernel.c')
-rw-r--r--src/kernel/kernel.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index ab60f18..0aa394e 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -18,15 +18,24 @@
#include <smp.h>
//testing headers
-//#include <testmalloc.h>
+#include <smp_racetest.h>
void kmain() {
+ printf("Kernal started on core %i\n", get_coreid());
+ sync_malloc();
PANIC(KERNEL_PANIC_KERNEL_RETURNED);
}
+static bool smp_unlocked = false;
void smp_kinit() {
- printf("Kernal started on core <<<<< \n");
+
+ asm(".wait_for_release:\n"
+ "mov al, [%0]\n"
+ "test al, al\n"
+ "jz .wait_for_release\n"
+ ::"m"(smp_unlocked));
+
smp_load_idt();
kmain();
}
@@ -39,7 +48,8 @@ void kernel_init() {
pmap_size = map_complete_physical();
init_klog();
init_pmap(pmap_size);
- printf("\nKernal started on CPU 1!\n");
+ printf("\nKernal started on core 1!\n");
+ //test_malloc(100);
find_root_sdp();
@@ -52,7 +62,12 @@ void kernel_init() {
clear_screen();
debug_pzone();
- smp_boot();
+ smp_prepare();
+
+ //the rest of this needs to get done before the cores start executing
+ init_pmap_smp();
+ smp_unlocked = true;
+
fix_stack();
unmap_lowmem();
kmain();