summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sys/arch/amd64/cpu/mmu.c11
-rw-r--r--src/sys/include/vm/mmu.h10
2 files changed, 21 insertions, 0 deletions
diff --git a/src/sys/arch/amd64/cpu/mmu.c b/src/sys/arch/amd64/cpu/mmu.c
index face548..2b98d78 100644
--- a/src/sys/arch/amd64/cpu/mmu.c
+++ b/src/sys/arch/amd64/cpu/mmu.c
@@ -394,6 +394,17 @@ mmu_write_vas(struct vm_vas *vas)
}
/*
+ * Allocate the frame used for a VAS
+ */
+int
+mmu_free_vas(struct vm_vas *vas)
+{
+ vm_free_frame(vas->cr3, 1);
+ vas->cr3 = 0;
+ return 0;
+}
+
+/*
* Verify that we are in a known state
*/
int
diff --git a/src/sys/include/vm/mmu.h b/src/sys/include/vm/mmu.h
index 820b24d..be0678e 100644
--- a/src/sys/include/vm/mmu.h
+++ b/src/sys/include/vm/mmu.h
@@ -117,4 +117,14 @@ int mmu_new_vas(struct vm_vas *res);
*/
int mmu_write_vas(struct vm_vas *vas);
+/*
+ * Destroy a virtual address space
+ *
+ * @vas: VAS to destroy
+ *
+ * Returns zero on success, otherwise a less than
+ * zero value to indicate error.
+ */
+int mmu_free_vas(struct vm_vas *vas);
+
#endif /* !_MACHINE_MMU_H_ */