Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/phys_pager.c
Show First 20 Lines • Show All 213 Lines • ▼ Show 20 Lines | if (m == NULL) { | ||||
VM_ALLOC_ZERO | VM_ALLOC_WAITFAIL | | VM_ALLOC_ZERO | VM_ALLOC_WAITFAIL | | ||||
VM_ALLOC_COUNT(ahead)); | VM_ALLOC_COUNT(ahead)); | ||||
if (m == NULL) | if (m == NULL) | ||||
goto retry; | goto retry; | ||||
if ((m->flags & PG_ZERO) == 0) | if ((m->flags & PG_ZERO) == 0) | ||||
pmap_zero_page(m); | pmap_zero_page(m); | ||||
m->valid = VM_PAGE_BITS_ALL; | m->valid = VM_PAGE_BITS_ALL; | ||||
} else if (vm_page_xbusied(m)) { | } else if (vm_page_xbusied(m)) { | ||||
vm_page_lock(m); | vm_page_sleep_if_xbusy(m, "physb"); | ||||
VM_OBJECT_WUNLOCK(object); | |||||
vm_page_busy_sleep(m, "physb", true); | |||||
VM_OBJECT_WLOCK(object); | |||||
goto retry; | goto retry; | ||||
} else { | } else { | ||||
vm_page_xbusy(m); | vm_page_xbusy(m); | ||||
if (m->valid != VM_PAGE_BITS_ALL) | if (m->valid != VM_PAGE_BITS_ALL) | ||||
vm_page_zero_invalid(m, TRUE); | vm_page_zero_invalid(m, TRUE); | ||||
} | } | ||||
KASSERT(m->valid == VM_PAGE_BITS_ALL, | KASSERT(m->valid == VM_PAGE_BITS_ALL, | ||||
Show All 39 Lines |