- for (size_t i = 0; i < KSTACK_SIZE; i+=MEM_PAGE) {
- ptr_t stack_page = PG_ALIGN(thread->kstack - i);
- vmm_del_mapping(vm_mnt, stack_page);
- }
+ struct leaflet* leaflet;
+ struct proc_mm* mm = vmspace(thread->process);
+ ptr_t vm_mnt = mm->vm_mnt;
+
+ // Ensure we have mounted
+ assert(vm_mnt);
+
+ pte_t* ptep = mkptep_va(vm_mnt, thread->kstack);
+ leaflet = pte_leaflet(*ptep);
+
+ ptep -= KSTACK_PAGES - 1;
+ set_pte(ptep, null_pte);
+ ptep_unmap_leaflet(ptep + 1, leaflet);
+
+ leaflet_return(leaflet);