Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_fault.c
Show First 20 Lines • Show All 1,288 Lines • ▼ Show 20 Lines | vm_fault_busy_sleep(struct faultstate *fs) | ||||
*/ | */ | ||||
vm_page_aflag_set(fs->m, PGA_REFERENCED); | vm_page_aflag_set(fs->m, PGA_REFERENCED); | ||||
if (fs->object != fs->first_object) { | if (fs->object != fs->first_object) { | ||||
fault_page_release(&fs->first_m); | fault_page_release(&fs->first_m); | ||||
vm_object_pip_wakeup(fs->first_object); | vm_object_pip_wakeup(fs->first_object); | ||||
} | } | ||||
vm_object_pip_wakeup(fs->object); | vm_object_pip_wakeup(fs->object); | ||||
unlock_map(fs); | unlock_map(fs); | ||||
if (fs->m == vm_page_lookup(fs->object, fs->pindex)) | if (fs->m != vm_page_lookup(fs->object, fs->pindex) || | ||||
vm_page_busy_sleep(fs->m, "vmpfw", false); | !vm_page_busy_sleep(fs->m, "vmpfw", 0)) | ||||
else | |||||
VM_OBJECT_WUNLOCK(fs->object); | VM_OBJECT_WUNLOCK(fs->object); | ||||
VM_CNT_INC(v_intrans); | VM_CNT_INC(v_intrans); | ||||
vm_object_deallocate(fs->first_object); | vm_object_deallocate(fs->first_object); | ||||
} | } | ||||
int | int | ||||
vm_fault(vm_map_t map, vm_offset_t vaddr, vm_prot_t fault_type, | vm_fault(vm_map_t map, vm_offset_t vaddr, vm_prot_t fault_type, | ||||
int fault_flags, vm_page_t *m_hold) | int fault_flags, vm_page_t *m_hold) | ||||
▲ Show 20 Lines • Show All 824 Lines • Show Last 20 Lines |