Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vm_glue.c
Show First 20 Lines • Show All 402 Lines • ▼ Show 20 Lines | vm_thread_stack_dispose(vm_object_t ksobj, vm_offset_t ks, int pages) | ||||
atomic_add_int(&kstacks, -1); | atomic_add_int(&kstacks, -1); | ||||
pmap_qremove(ks, pages); | pmap_qremove(ks, pages); | ||||
VM_OBJECT_WLOCK(ksobj); | VM_OBJECT_WLOCK(ksobj); | ||||
for (i = 0; i < pages; i++) { | for (i = 0; i < pages; i++) { | ||||
m = vm_page_lookup(ksobj, i); | m = vm_page_lookup(ksobj, i); | ||||
if (m == NULL) | if (m == NULL) | ||||
panic("vm_thread_dispose: kstack already missing?"); | panic("vm_thread_dispose: kstack already missing?"); | ||||
vm_page_lock(m); | vm_page_lock(m); | ||||
vm_page_unwire(m, PQ_NONE); | vm_page_unwire_noq(m); | ||||
vm_page_free(m); | vm_page_free(m); | ||||
vm_page_unlock(m); | vm_page_unlock(m); | ||||
} | } | ||||
VM_OBJECT_WUNLOCK(ksobj); | VM_OBJECT_WUNLOCK(ksobj); | ||||
vm_object_deallocate(ksobj); | vm_object_deallocate(ksobj); | ||||
kva_free(ks - (KSTACK_GUARD_PAGES * PAGE_SIZE), | kva_free(ks - (KSTACK_GUARD_PAGES * PAGE_SIZE), | ||||
(pages + KSTACK_GUARD_PAGES) * PAGE_SIZE); | (pages + KSTACK_GUARD_PAGES) * PAGE_SIZE); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 179 Lines • Show Last 20 Lines |