summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/hal/smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/hal/smp.c')
-rw-r--r--arch/x86_64/hal/smp.c14
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)