summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/sys/arch/amd64/os/os_proc.c12
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);