#include <lunaix/fs.h>
#include <lunaix/iopoll.h>
#include <lunaix/mm/mm.h>
-#include <lunaix/mm/page.h>
+#include <lunaix/mm/pagetable.h>
#include <lunaix/mm/region.h>
#include <lunaix/signal.h>
#include <lunaix/timer.h>
static inline struct proc_mm*
vmspace(struct proc_info* proc)
{
- return proc->mm;
+ return proc ? proc->mm : NULL;
}
static inline ptr_t
vmroot(struct proc_info* proc)
{
- return proc->mm->vmroot;
+ return proc ? proc->mm->vmroot : 0;
}
static inline vm_regions_t*
vmregions(struct proc_info* proc)
{
- return &proc->mm->regions;
+ return proc ? &proc->mm->regions : NULL;
}
static inline void
alloc_thread(struct proc_info* process);
void
-destory_thread(ptr_t vm_mnt, struct thread* thread);
+destory_thread(struct thread* thread);
void
terminate_thread(struct thread* thread, ptr_t val);
terminate_current_thread(ptr_t val);
struct thread*
-create_thread(struct proc_info* proc, ptr_t vm_mnt, bool with_ustack);
+create_thread(struct proc_info* proc, bool with_ustack);
void
-start_thread(struct thread* th, ptr_t vm_mnt, ptr_t entry);
+start_thread(struct thread* th, ptr_t entry);
static inline void
spawn_kthread(ptr_t entry) {
assert(kernel_process(__current));
- struct thread* th = create_thread(__current, VMS_SELF, false);
+ struct thread* th = create_thread(__current, false);
assert(th);
- start_thread(th, VMS_SELF, entry);
+ start_thread(th, entry);
}
void
exit_thread(void* val);
void
-thread_release_mem(struct thread* thread, ptr_t vm_mnt);
+thread_release_mem(struct thread* thread);
/*
========= Signal =========