diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-09 10:24:41 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-09 10:24:41 -0400 |
| commit | cc23ea5a4b38807e79aceb23e6f43e965926618f (patch) | |
| tree | 90142bb44186f4dad7bbd82d3d53655b835c822b /arch/x86_64/hal/smp.c | |
| parent | 434ddcd907832b1febc7d70e4faa52109c7eb3bd (diff) | |
| download | jove-kernel-cc23ea5a4b38807e79aceb23e6f43e965926618f.tar.gz jove-kernel-cc23ea5a4b38807e79aceb23e6f43e965926618f.tar.bz2 jove-kernel-cc23ea5a4b38807e79aceb23e6f43e965926618f.zip | |
add basic scheduler logic. rename init rootdir indexes
Diffstat (limited to 'arch/x86_64/hal/smp.c')
| -rw-r--r-- | arch/x86_64/hal/smp.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/arch/x86_64/hal/smp.c b/arch/x86_64/hal/smp.c index b894eb9..392e68f 100644 --- a/arch/x86_64/hal/smp.c +++ b/arch/x86_64/hal/smp.c @@ -8,6 +8,7 @@ #include "proc/process.h" #include "lib/printf.h" #include "lib/string.h" +#include "sys/objdir.h" processor_t s_processors[SMP_PROCESSORS_MAX]; @@ -43,7 +44,7 @@ smp_init_bsp(void) processor_t *bsp = &s_processors[0]; { - jove_owned_obj_t *processor_objdir_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_PROCESSORS_I); + jove_owned_obj_t *processor_objdir_obj = objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_PROCESSORS_I); obj_settype(processor_objdir_obj, JOVE_OBJ_OBJDIR); obj_setvalue(processor_objdir_obj, (uintptr_t)&s_processor_objdir); @@ -58,12 +59,23 @@ smp_init_bsp(void) paging_pml4_init(); } -processor_t *processor_current(void) +inline processor_t *processor_current(void) { return (processor_t*)msr_get_gs_base(); } -jove_owned_obj_t *processor_pcb(processor_t *processor) +inline jove_owned_obj_t *processor_getpcb(processor_t *processor) { return processor->pcb_obj; } + +void +processor_setpcb(processor_t *processor, jove_owned_obj_t *pcb_obj) +{ + pcb_t *pcb = obj_deref(pcb_obj); + if(processor->pcb) { + obj_release(processor_getpcb(processor)); + } + processor->pcb_obj = pcb_obj; + processor->pcb = pcb; +} |
