Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_glue.c
Show First 20 Lines • Show All 217 Lines • ▼ Show 20 Lines | |||||
vm_imgact_hold_page(vm_object_t object, vm_ooffset_t offset) | vm_imgact_hold_page(vm_object_t object, vm_ooffset_t offset) | ||||
{ | { | ||||
vm_page_t m; | vm_page_t m; | ||||
vm_pindex_t pindex; | vm_pindex_t pindex; | ||||
int rv; | int rv; | ||||
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); | |||||
kib: Pass VM_ALLOC_WIRE ? | |||||
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_lock(m); | ||||
vm_page_unwire(m, PQ_NONE); | |||||
vm_page_free(m); | vm_page_free(m); | ||||
vm_page_unlock(m); | vm_page_unlock(m); | ||||
m = NULL; | m = NULL; | ||||
goto out; | goto out; | ||||
} | } | ||||
vm_page_xunbusy(m); | vm_page_xunbusy(m); | ||||
} | } | ||||
vm_page_lock(m); | |||||
vm_page_hold(m); | |||||
vm_page_activate(m); | |||||
vm_page_unlock(m); | |||||
out: | out: | ||||
Done Inline ActionsThe this wiring is not needed, but unwire in error case is due. kib: The this wiring is not needed, but unwire in error case is due. | |||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
return (m); | return (m); | ||||
} | } | ||||
/* | /* | ||||
* Return a CPU private mapping to the page at the given offset within the | * Return a CPU private mapping to the page at the given offset within the | ||||
* given object. The page is pinned before it is mapped. | * given object. The page is pinned before it is mapped. | ||||
*/ | */ | ||||
Show All 16 Lines | |||||
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_lock(m); | ||||
vm_page_unhold(m); | vm_page_unwire(m, PQ_ACTIVE); | ||||
vm_page_unlock(m); | 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 314 Lines • Show Last 20 Lines |
Pass VM_ALLOC_WIRE ?