diff options
-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); |