From cf7cd8be60c254b44b444c97dcb238d7cf3afd4c Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Tue, 21 Sep 2021 10:50:33 -0500 Subject: palloc smp safe (testing required, NOT pfree) --- src/kernel/kernel.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'src/kernel/kernel.c') 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 //testing headers -//#include +#include 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(); -- cgit v1.2.3