summaryrefslogtreecommitdiffstats
path: root/proc
diff options
context:
space:
mode:
Diffstat (limited to 'proc')
-rw-r--r--proc/init.c6
-rw-r--r--proc/process.c4
-rw-r--r--proc/process.h4
-rw-r--r--proc/scheduler.c12
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);