Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_fault.c
Show First 20 Lines • Show All 1,206 Lines • ▼ Show 20 Lines | vm_fault_allocate(struct faultstate *fs) | ||||
*/ | */ | ||||
dset = fs->object->domain.dr_policy; | dset = fs->object->domain.dr_policy; | ||||
if (dset == NULL) | if (dset == NULL) | ||||
dset = curthread->td_domain.dr_policy; | dset = curthread->td_domain.dr_policy; | ||||
if (!vm_page_count_severe_set(&dset->ds_mask) || P_KILLED(curproc)) { | if (!vm_page_count_severe_set(&dset->ds_mask) || P_KILLED(curproc)) { | ||||
#if VM_NRESERVLEVEL > 0 | #if VM_NRESERVLEVEL > 0 | ||||
vm_object_color(fs->object, atop(fs->vaddr) - fs->pindex); | vm_object_color(fs->object, atop(fs->vaddr) - fs->pindex); | ||||
#endif | #endif | ||||
if (!vm_pager_can_alloc_page(fs->object, fs->pindex)) { | |||||
unlock_and_deallocate(fs); | |||||
return (FAULT_FAILURE); | |||||
} | |||||
fs->m = vm_page_alloc(fs->object, fs->pindex, | fs->m = vm_page_alloc(fs->object, fs->pindex, | ||||
P_KILLED(curproc) ? VM_ALLOC_SYSTEM : 0); | P_KILLED(curproc) ? VM_ALLOC_SYSTEM : 0); | ||||
} | } | ||||
if (fs->m == NULL) { | if (fs->m == NULL) { | ||||
if (vm_fault_allocate_oom(fs)) | if (vm_fault_allocate_oom(fs)) | ||||
vm_waitpfault(dset, vm_pfault_oom_wait * hz); | vm_waitpfault(dset, vm_pfault_oom_wait * hz); | ||||
return (FAULT_RESTART); | return (FAULT_RESTART); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 980 Lines • Show Last 20 Lines |