git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refactor: simplify the vmm design, single responsibility. But using it should with...
[lunaix-os.git]
/
lunaix-os
/
kernel
/
process.c
diff --git
a/lunaix-os/kernel/process.c
b/lunaix-os/kernel/process.c
index 64f2654af6a0d1b621e2cc7e1d1f71657a5fae8f..2e3e356685be91b5b183760becc7c72379241c36 100644
(file)
--- a/
lunaix-os/kernel/process.c
+++ b/
lunaix-os/kernel/process.c
@@
-1,6
+1,7
@@
#include <klibc/string.h>
#include <lunaix/clock.h>
#include <lunaix/common.h>
#include <klibc/string.h>
#include <lunaix/clock.h>
#include <lunaix/common.h>
+#include <lunaix/mm/pmm.h>
#include <lunaix/mm/region.h>
#include <lunaix/mm/vmm.h>
#include <lunaix/process.h>
#include <lunaix/mm/region.h>
#include <lunaix/mm/vmm.h>
#include <lunaix/process.h>
@@
-15,7
+16,9
@@
void*
__dup_pagetable(pid_t pid, uintptr_t mount_point)
{
void* ptd_pp = pmm_alloc_page(pid, PP_FGPERSIST);
__dup_pagetable(pid_t pid, uintptr_t mount_point)
{
void* ptd_pp = pmm_alloc_page(pid, PP_FGPERSIST);
- x86_page_table* ptd = vmm_fmap_page(pid, PG_MOUNT_1, ptd_pp, PG_PREM_RW);
+ vmm_set_mapping(PD_REFERENCED, PG_MOUNT_1, ptd_pp, PG_PREM_RW);
+
+ x86_page_table* ptd = PG_MOUNT_1;
x86_page_table* pptd = (x86_page_table*)(mount_point | (0x3FF << 12));
for (size_t i = 0; i < PG_MAX_ENTRIES - 1; i++) {
x86_page_table* pptd = (x86_page_table*)(mount_point | (0x3FF << 12));
for (size_t i = 0; i < PG_MAX_ENTRIES - 1; i++) {
@@
-25,9
+28,11
@@
__dup_pagetable(pid_t pid, uintptr_t mount_point)
continue;
}
continue;
}
- x86_page_table* ppt = (x86_page_table*)(mount_point | (i << 12));
void* pt_pp = pmm_alloc_page(pid, PP_FGPERSIST);
void* pt_pp = pmm_alloc_page(pid, PP_FGPERSIST);
- x86_page_table* pt = vmm_fmap_page(pid, PG_MOUNT_2, pt_pp, PG_PREM_RW);
+ vmm_set_mapping(PD_REFERENCED, PG_MOUNT_2, pt_pp, PG_PREM_RW);
+
+ x86_page_table* ppt = (x86_page_table*)(mount_point | (i << 12));
+ x86_page_table* pt = PG_MOUNT_2;
for (size_t j = 0; j < PG_MAX_ENTRIES; j++) {
x86_pte_t pte = ppt->entry[j];
for (size_t j = 0; j < PG_MAX_ENTRIES; j++) {
x86_pte_t pte = ppt->entry[j];
@@
-107,14
+112,14
@@
__DEFINE_LXSYSCALL2(int, setpgid, pid_t, pid, pid_t, pgid)
pgid = pgid ? pgid : proc->pid;
pgid = pgid ? pgid : proc->pid;
- llist_delete(&proc->grp_member);
struct proc_info* gruppenfuhrer = get_process(pgid);
struct proc_info* gruppenfuhrer = get_process(pgid);
- if (!gruppenfuhrer) {
+ if (!gruppenfuhrer
|| proc->pgid == proc->pid
) {
__current->k_status = LXINVL;
return -1;
}
__current->k_status = LXINVL;
return -1;
}
+ llist_delete(&proc->grp_member);
llist_append(&gruppenfuhrer->grp_member, &proc->grp_member);
proc->pgid = pgid;
llist_append(&gruppenfuhrer->grp_member, &proc->grp_member);
proc->pgid = pgid;