diff options
Diffstat (limited to 'proc')
| -rw-r--r-- | proc/init.c | 6 | ||||
| -rw-r--r-- | proc/process.c | 4 | ||||
| -rw-r--r-- | proc/process.h | 4 | ||||
| -rw-r--r-- | proc/scheduler.c | 12 |
4 files changed, 6 insertions, 20 deletions
diff --git a/proc/init.c b/proc/init.c index 130b10e..39f3ba9 100644 --- a/proc/init.c +++ b/proc/init.c @@ -8,10 +8,7 @@ objpath_part_t s_last_region = OBJDIR_ENTRIES-1; jove_owned_obj_t init_pop_alloc(void) { - jove_owned_obj_t *freemem_dir = objdir_trygetlocal(_rootdir_obj, INIT_ROOTDIR_FREEMEMORY_I); - if(freemem_dir == 0) { - kpanic("Untyped directory is locked!\n"); - } + jove_obj_t *freemem_dir = obj_release(objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_FREEMEMORY_I)); int cycles = 0; while(cycles++ < 512) { @@ -29,7 +26,6 @@ init_pop_alloc(void) } obj_release(region); - obj_release(freemem_dir); return frame; } kpanic("%s: Kernel is out of memory!\n", __func__); diff --git a/proc/process.c b/proc/process.c index f659c24..19f8074 100644 --- a/proc/process.c +++ b/proc/process.c @@ -125,13 +125,13 @@ pcb_getrootdir(pcb_t *pcb) } inline jove_owned_obj_t* -pcb_getpagedir(jove_owned_obj_t *rootdir_obj) +pcb_getpagedir(jove_obj_t *rootdir_obj) { return objdir_getlocal(rootdir_obj, PCB_ROOTDIR_PAGEDIR_I); } inline jove_owned_obj_t* -pcb_getself(jove_owned_obj_t *rootdir_obj) +pcb_getself(jove_obj_t *rootdir_obj) { return objdir_getlocal(rootdir_obj, PCB_ROOTDIR_SELF_I); } diff --git a/proc/process.h b/proc/process.h index f566ba4..24bd379 100644 --- a/proc/process.h +++ b/proc/process.h @@ -43,8 +43,8 @@ pcb_t *pcb_frompid(pid_t pid); pid_t pcb_getpid(pcb_t *pcb); jove_obj_t *pcb_getrootdir(pcb_t *pcb); -jove_owned_obj_t *pcb_getpagedir(jove_owned_obj_t *rootdir_obj); -jove_owned_obj_t *pcb_getself(jove_owned_obj_t *rootdir_obj); +jove_owned_obj_t *pcb_getpagedir(jove_obj_t *rootdir_obj); +jove_owned_obj_t *pcb_getself(jove_obj_t *rootdir_obj); struct port *pcb_getport(pcb_t *pcb); diff --git a/proc/scheduler.c b/proc/scheduler.c index ba00abc..a3c3071 100644 --- a/proc/scheduler.c +++ b/proc/scheduler.c @@ -18,16 +18,13 @@ static uintmax_t s_this_tick; static inline void s_scheduler_swap_pcb(processor_t *proc, pcb_t *current_pcb, pcb_t *target_pcb) { - jove_owned_obj_t *target_rootdir = obj_take(pcb_getrootdir(target_pcb)); + jove_obj_t *target_rootdir = pcb_getrootdir(target_pcb); jove_owned_obj_t *target_pcb_obj = pcb_getself(target_rootdir); jove_obj_t target_pagedir = objdir_peeklocal(target_rootdir, PCB_ROOTDIR_PAGEDIR_I); - obj_release(target_rootdir); - processor_setpcb(proc, target_pcb_obj); _scheduler_switch_pcb_arch(target_pcb); - scheduler_switch( pcb_getksp_ref(current_pcb), pcb_getksp(target_pcb), @@ -170,15 +167,8 @@ void scheduler_init(jove_owned_obj_t *pcb_obj, void *process_main) pcb_set_syscall_stack((pcb_t*)pcb_header, obj_getvalue(&syscall_stack)); pcb_set_interrupt_stack((pcb_t*)pcb_header, obj_getvalue(&interrupt_stack)); - kprintf("Syscall stack %p %p\n", *__syscall_stack_mapping, pcb_get_syscall_stack((pcb_t*)pcb_header)); - kprintf("Interrupt stack %p %p\n", *__interrupt_stack_mapping, pcb_get_interrupt_stack((pcb_t*)pcb_header)); - _scheduler_switch_pcb_arch((pcb_t*)pcb_header); - jove_owned_obj_t *pagedir_obj = pcb_getpagedir(_rootdir_obj); - void *pagedir = (void*)obj_getvalue(pagedir_obj); - obj_release(pagedir_obj); - pcb_map_syscall_stack((pcb_t*)pcb_header); pcb_map_interrupt_stack((pcb_t*)pcb_header); |
