+void
+mem_unmap_region(ptr_t mnt, struct mm_region* region)
+{
+ size_t len = ROUNDUP(region->end - region->start, PG_SIZE);
+ mem_sync_pages(mnt, region, region->start, len, 0);
+
+ for (size_t i = region->start; i <= region->end; i += PG_SIZE) {
+ ptr_t pa = vmm_del_mapping(mnt, i);
+ if (pa) {
+ pmm_free_page(__current->pid, pa);
+ }
+ }
+ llist_delete(®ion->head);
+ region_release(region);
+}
+