Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/phys_pager.c
Show First 20 Lines • Show All 139 Lines • ▼ Show 20 Lines | |||||
static int | static int | ||||
phys_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind, | phys_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind, | ||||
int *rahead) | int *rahead) | ||||
{ | { | ||||
int i; | int i; | ||||
VM_OBJECT_ASSERT_WLOCKED(object); | VM_OBJECT_ASSERT_WLOCKED(object); | ||||
for (i = 0; i < count; i++) { | for (i = 0; i < count; i++) { | ||||
if (m[i]->valid == 0) { | if (vm_page_none_valid(m[i])) { | ||||
if ((m[i]->flags & PG_ZERO) == 0) | if ((m[i]->flags & PG_ZERO) == 0) | ||||
pmap_zero_page(m[i]); | pmap_zero_page(m[i]); | ||||
m[i]->valid = VM_PAGE_BITS_ALL; | vm_page_valid(m[i]); | ||||
} | } | ||||
KASSERT(m[i]->valid == VM_PAGE_BITS_ALL, | KASSERT(vm_page_all_valid(m[i]), | ||||
("phys_pager_getpages: partially valid page %p", m[i])); | ("phys_pager_getpages: partially valid page %p", m[i])); | ||||
KASSERT(m[i]->dirty == 0, | KASSERT(m[i]->dirty == 0, | ||||
("phys_pager_getpages: dirty page %p", m[i])); | ("phys_pager_getpages: dirty page %p", m[i])); | ||||
} | } | ||||
if (rbehind) | if (rbehind) | ||||
*rbehind = 0; | *rbehind = 0; | ||||
if (rahead) | if (rahead) | ||||
*rahead = 0; | *rahead = 0; | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | if (end > *last) | ||||
end = *last; | end = *last; | ||||
*first = base; | *first = base; | ||||
*last = end; | *last = end; | ||||
for (i = base; i <= end; i++) { | for (i = base; i <= end; i++) { | ||||
ahead = MIN(end - i, PHYSALLOC); | ahead = MIN(end - i, PHYSALLOC); | ||||
m = vm_page_grab(object, i, | m = vm_page_grab(object, i, | ||||
VM_ALLOC_NORMAL | VM_ALLOC_COUNT(ahead)); | VM_ALLOC_NORMAL | VM_ALLOC_COUNT(ahead)); | ||||
if (m->valid != VM_PAGE_BITS_ALL) { | if (!vm_page_all_valid(m)) | ||||
vm_page_zero_invalid(m, TRUE); | vm_page_zero_invalid(m, TRUE); | ||||
m->valid = VM_PAGE_BITS_ALL; | |||||
} | |||||
KASSERT(m->dirty == 0, | KASSERT(m->dirty == 0, | ||||
("phys_pager_populate: dirty page %p", m)); | ("phys_pager_populate: dirty page %p", m)); | ||||
} | } | ||||
return (VM_PAGER_OK); | return (VM_PAGER_OK); | ||||
} | } | ||||
static void | static void | ||||
phys_pager_putpages(vm_object_t object, vm_page_t *m, int count, boolean_t sync, | phys_pager_putpages(vm_object_t object, vm_page_t *m, int count, boolean_t sync, | ||||
Show All 30 Lines |