diff options
Diffstat (limited to 'arch/x86_64/hal/smp.c')
| -rw-r--r-- | arch/x86_64/hal/smp.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/x86_64/hal/smp.c b/arch/x86_64/hal/smp.c index 85ba4ec..682c6e6 100644 --- a/arch/x86_64/hal/smp.c +++ b/arch/x86_64/hal/smp.c @@ -5,13 +5,13 @@ #include "config.h" #include "jove.h" #include "lib/printf.h" +#include "lib/string.h" #include "paging.h" #include "msr.h" -processor_t s_processors[SMP_PROCESSORS_MAX] = { 0 }; +processor_t s_processors[SMP_PROCESSORS_MAX]; -PAGEALIGN -jove_objdir_t s_processor_objdir = { 0 }; +PAGEALIGN jove_objdir_t s_processor_objdir; extern void gdt_setup(processor_t *processor); @@ -38,10 +38,9 @@ init_processor(processor_t *processor, jove_owned_obj_t *obj) void smp_init_bsp(void) { - idt_init(); - paging_pml4_init(); + memset(s_processors, 0, sizeof(s_processors)); + memset(&s_processor_objdir, 0, 0x1000); - kprintf("%p\n", _rootdir_obj); processor_t *bsp = &s_processors[0]; { jove_owned_obj_t *processor_objdir_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_PROCESSORS_I); @@ -54,6 +53,9 @@ smp_init_bsp(void) obj_release(bsp_obj); obj_release(processor_objdir_obj); } + + paging_pml4_init(); + idt_init(); } processor_t *processor_current(void) |
