diff options
author | Brett Weiland <brett_weiland@bpcspace.com> | 2021-09-21 10:50:33 -0500 |
---|---|---|
committer | Brett Weiland <brett_weiland@bpcspace.com> | 2021-09-21 10:50:33 -0500 |
commit | cf7cd8be60c254b44b444c97dcb238d7cf3afd4c (patch) | |
tree | e86fe62827f4dbc5f1b6b74cf7bd89c78e797711 /src/kernel/kernel.c | |
parent | 907fb823bf8329066b1bcff60ea6c4faa54a3642 (diff) |
palloc smp safe (testing required, NOT pfree)
Diffstat (limited to 'src/kernel/kernel.c')
-rw-r--r-- | src/kernel/kernel.c | 23 |
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(); |