diff options
author | Ian Moffett <ian@osmora.org> | 2025-03-25 10:24:49 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-03-25 10:48:34 -0400 |
commit | 3d99d2fbd600091a3dec0697e35dddfca17621ab (patch) | |
tree | 83d1fa02223696e772fb3c96d2bdc8134cb69134 /sys/kern | |
parent | 7497caf0fc2ca740229205bc857ce5fb2ff698be (diff) |
kernel: vm: Add initial mmap() impl
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_fork.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 6feeee2..abb7707 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -27,6 +27,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include <sys/mman.h> +#include <sys/tree.h> #include <sys/types.h> #include <sys/proc.h> #include <sys/errno.h> @@ -49,12 +51,17 @@ int fork1(struct proc *cur, int flags, void(*ip)(void), struct proc **newprocp) { struct proc *newproc; + struct mmap_lgdr *mlgdr; int status = 0; newproc = dynalloc(sizeof(*newproc)); if (newproc == NULL) return -ENOMEM; + mlgdr = dynalloc(sizeof(*mlgdr)); + if (mlgdr == NULL) + return -ENOMEM; + memset(newproc, 0, sizeof(*newproc)); status = md_fork(newproc, cur, (uintptr_t)ip); if (status != 0) @@ -64,6 +71,11 @@ fork1(struct proc *cur, int flags, void(*ip)(void), struct proc **newprocp) if (newprocp != NULL) *newprocp = newproc; + /* Initialize the mmap ledger */ + mlgdr->nbytes = 0; + RBT_INIT(lgdr_entries, &mlgdr->hd); + newproc->mlgdr = mlgdr; + newproc->pid = ++nthreads; signals_init(newproc); sched_enqueue_td(newproc); |