summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/hal/smp.c
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-10-09 10:24:41 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-10-09 10:24:41 -0400
commitcc23ea5a4b38807e79aceb23e6f43e965926618f (patch)
tree90142bb44186f4dad7bbd82d3d53655b835c822b /arch/x86_64/hal/smp.c
parent434ddcd907832b1febc7d70e4faa52109c7eb3bd (diff)
downloadjove-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.c18
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;
+}