summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/proc
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-10-16 16:42:22 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-10-16 16:42:22 -0400
commitd8aca3ff2501f9a77e22e5afb7a30380aed205af (patch)
treea27db1749a35aea07317406f170a2d9b2a799ce7 /arch/x86_64/proc
parent548506392b789f58b1556a6ffca917441e1d89fd (diff)
downloadjove-kernel-d8aca3ff2501f9a77e22e5afb7a30380aed205af.tar.gz
jove-kernel-d8aca3ff2501f9a77e22e5afb7a30380aed205af.tar.bz2
jove-kernel-d8aca3ff2501f9a77e22e5afb7a30380aed205af.zip
remove explicit framebuffer in kernel. reduce locking in syscalls
Diffstat (limited to 'arch/x86_64/proc')
-rw-r--r--arch/x86_64/proc/init.c15
-rw-r--r--arch/x86_64/proc/scheduler.c9
2 files changed, 14 insertions, 10 deletions
diff --git a/arch/x86_64/proc/init.c b/arch/x86_64/proc/init.c
index 8003a6d..6c5c36e 100644
--- a/arch/x86_64/proc/init.c
+++ b/arch/x86_64/proc/init.c
@@ -11,8 +11,7 @@
#include "lib/printf.h"
#include "arch/x86_64/lib/elf.h"
#include "arch/x86_64/hal/paging.h"
-#include "boot/cmdline.h"
-#include "boot/initrd.h"
+#include "boot/boot.h"
static int
elf_is_valid(struct elf_header *ehdr)
@@ -52,15 +51,13 @@ init_setup(void)
kpanic("Kernel commandline is missing 'init' arg.\n");
}
- jove_owned_obj_t *initrd_obj = objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_INITRD_I);
- jove_owned_obj_t *init_obj = initrd_seek(initrd_obj, init_path);
- if(init_obj == NULL) {
- kpanic("init: Cannot find file '%s' in initrd.\n", init_path);
+ jove_owned_obj_t *init_obj = boot_getmodule(init_path);
+ if(init_obj == 0) {
+ kpanic("Unable to get module %s : %s\n", init_path, errstr(errno));
}
- obj_release(initrd_obj);
- void *init_data = initrd_file_data(init_obj);
- obj_release(init_obj);
+ void *init_data = shmem_deref(init_obj);
+ kprintf("Found init at %p\n", init_data);
struct elf_header *init_ehdr = init_data;
if(init_ehdr == NULL) {
diff --git a/arch/x86_64/proc/scheduler.c b/arch/x86_64/proc/scheduler.c
index 49a0c4d..6c748c7 100644
--- a/arch/x86_64/proc/scheduler.c
+++ b/arch/x86_64/proc/scheduler.c
@@ -1,5 +1,7 @@
#include "proc/scheduler.h"
#include "arch/x86_64/hal/gdt.h"
+#include "arch/x86_64/hal/obj.h"
+#include "lib/printf.h"
#include "lib/string.h"
#include "process.h"
#include "../hal/smp.h"
@@ -12,10 +14,15 @@ _scheduler_switch_pcb_arch(pcb_t *target)
proc->syscall_page = target->interrupt_page;
proc->interrupt_page = target->interrupt_page;
+ proc->tss.rsp[0] = __interrupt_stack + 0xFF8;
+
if(target->iopb) {
proc->tss.iopb = sizeof(struct tss);
jove_owned_obj_t *iopb_obj = obj_take(target->iopb);
- memcpy(proc->iopb, obj_deref(iopb_obj), sizeof(proc->iopb));
+ if(obj_gettype(iopb_obj) != JOVE_OBJ_IOPB) {
+ memcpy(proc->iopb, obj_deref(iopb_obj), sizeof(proc->iopb));
+ }
+ obj_release(iopb_obj);
}else{
proc->tss.iopb = 0xff;
}