Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_glue.c
Show First 20 Lines • Show All 223 Lines • ▼ Show 20 Lines | vm_imgact_hold_page(vm_object_t object, vm_ooffset_t offset) | ||||
VM_OBJECT_WLOCK(object); | VM_OBJECT_WLOCK(object); | ||||
pindex = OFF_TO_IDX(offset); | pindex = OFF_TO_IDX(offset); | ||||
m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | ||||
VM_ALLOC_WIRED); | VM_ALLOC_WIRED); | ||||
if (m->valid != VM_PAGE_BITS_ALL) { | if (m->valid != VM_PAGE_BITS_ALL) { | ||||
vm_page_xbusy(m); | vm_page_xbusy(m); | ||||
rv = vm_pager_get_pages(object, &m, 1, NULL, NULL); | rv = vm_pager_get_pages(object, &m, 1, NULL, NULL); | ||||
if (rv != VM_PAGER_OK) { | if (rv != VM_PAGER_OK) { | ||||
vm_page_lock(m); | |||||
vm_page_unwire_noq(m); | vm_page_unwire_noq(m); | ||||
vm_page_free(m); | vm_page_free(m); | ||||
vm_page_unlock(m); | |||||
m = NULL; | m = NULL; | ||||
goto out; | goto out; | ||||
} | } | ||||
vm_page_xunbusy(m); | vm_page_xunbusy(m); | ||||
} | } | ||||
out: | out: | ||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
return (m); | return (m); | ||||
Show All 21 Lines | |||||
void | void | ||||
vm_imgact_unmap_page(struct sf_buf *sf) | vm_imgact_unmap_page(struct sf_buf *sf) | ||||
{ | { | ||||
vm_page_t m; | vm_page_t m; | ||||
m = sf_buf_page(sf); | m = sf_buf_page(sf); | ||||
sf_buf_free(sf); | sf_buf_free(sf); | ||||
sched_unpin(); | sched_unpin(); | ||||
vm_page_lock(m); | |||||
vm_page_unwire(m, PQ_ACTIVE); | vm_page_unwire(m, PQ_ACTIVE); | ||||
vm_page_unlock(m); | |||||
} | } | ||||
void | void | ||||
vm_sync_icache(vm_map_t map, vm_offset_t va, vm_offset_t sz) | vm_sync_icache(vm_map_t map, vm_offset_t va, vm_offset_t sz) | ||||
{ | { | ||||
pmap_sync_icache(map->pmap, va, sz); | pmap_sync_icache(map->pmap, va, sz); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | vm_thread_stack_dispose(vm_object_t ksobj, vm_offset_t ks, int pages) | ||||
int i; | int i; | ||||
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_unwire_noq(m); | vm_page_unwire_noq(m); | ||||
vm_page_free(m); | vm_page_free(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 227 Lines • Show Last 20 Lines |