diff options
author | Ian Moffett <ian@osmora.org> | 2025-09-23 11:32:15 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-09-23 11:32:15 -0400 |
commit | 6abb6c1c0d73aeb73c92085fbae99690537c46d8 (patch) | |
tree | d59e3b074402d42d77b99ab61e35b00d31ece69c /src/sys/arch/amd64/os | |
parent | 4f32156ff69980b8e9768d8593c25bdd8f7a1f34 (diff) |
kern/amd64: proc: Deallocate mapped frames on exit
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/sys/arch/amd64/os')
-rw-r--r-- | src/sys/arch/amd64/os/os_proc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/sys/arch/amd64/os/os_proc.c b/src/sys/arch/amd64/os/os_proc.c index 8318476..d944f41 100644 --- a/src/sys/arch/amd64/os/os_proc.c +++ b/src/sys/arch/amd64/os/os_proc.c @@ -33,6 +33,7 @@ #include <sys/cdefs.h> #include <vm/mmu.h> #include <vm/map.h> +#include <vm/physseg.h> #include <machine/pcb.h> #include <machine/gdt.h> #include <machine/frame.h> @@ -221,9 +222,11 @@ done: int md_proc_kill(struct proc *procp, int flags) { + const size_t PSIZE = DEFAULT_PAGESIZE; struct proc *self; struct pcore *core = this_core(); struct md_pcb *pcbp; + struct vm_range *range; if (core == NULL) { return -ENXIO; @@ -234,6 +237,15 @@ md_proc_kill(struct proc *procp, int flags) procp = core->curproc; } + /* Free every range */ + TAILQ_FOREACH(range, &procp->maplist, link) { + if (range == NULL) { + continue; + } + + vm_free_frame(range->pa_base, range->len / PSIZE); + } + /* Release the VAS */ pcbp = &procp->pcb; mmu_free_vas(&pcbp->vas); |