Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_exec.c
Show First 20 Lines • Show All 973 Lines • ▼ Show 20 Lines | if (object == NULL) | ||||
return (EACCES); | return (EACCES); | ||||
VM_OBJECT_WLOCK(object); | VM_OBJECT_WLOCK(object); | ||||
#if VM_NRESERVLEVEL > 0 | #if VM_NRESERVLEVEL > 0 | ||||
vm_object_color(object, 0); | vm_object_color(object, 0); | ||||
#endif | #endif | ||||
retry: | retry: | ||||
ma[0] = vm_page_grab(object, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | ma[0] = vm_page_grab(object, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | ||||
VM_ALLOC_WIRED); | VM_ALLOC_WIRED); | ||||
if (ma[0]->valid != VM_PAGE_BITS_ALL) { | if (!vm_page_all_valid(ma[0])) { | ||||
if (vm_page_busy_acquire(ma[0], VM_ALLOC_WAITFAIL) == 0) { | if (vm_page_busy_acquire(ma[0], VM_ALLOC_WAITFAIL) == 0) { | ||||
vm_page_unwire_noq(ma[0]); | vm_page_unwire_noq(ma[0]); | ||||
goto retry; | goto retry; | ||||
} | } | ||||
if (vm_page_all_valid(ma[0])) { | |||||
vm_page_xunbusy(ma[0]); | |||||
goto out; | |||||
} | |||||
if (!vm_pager_has_page(object, 0, NULL, &after)) { | if (!vm_pager_has_page(object, 0, NULL, &after)) { | ||||
if (vm_page_unwire_noq(ma[0])) | if (vm_page_unwire_noq(ma[0])) | ||||
vm_page_free(ma[0]); | vm_page_free(ma[0]); | ||||
else | else | ||||
vm_page_xunbusy(ma[0]); | vm_page_xunbusy(ma[0]); | ||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
return (EIO); | return (EIO); | ||||
} | } | ||||
Show All 29 Lines | if (rv != VM_PAGER_OK) { | ||||
} | } | ||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
return (EIO); | return (EIO); | ||||
} | } | ||||
vm_page_xunbusy(ma[0]); | vm_page_xunbusy(ma[0]); | ||||
for (i = 1; i < initial_pagein; i++) | for (i = 1; i < initial_pagein; i++) | ||||
vm_page_readahead_finish(ma[i]); | vm_page_readahead_finish(ma[i]); | ||||
} | } | ||||
out: | |||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
imgp->firstpage = sf_buf_alloc(ma[0], 0); | imgp->firstpage = sf_buf_alloc(ma[0], 0); | ||||
imgp->image_header = (char *)sf_buf_kva(imgp->firstpage); | imgp->image_header = (char *)sf_buf_kva(imgp->firstpage); | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 792 Lines • Show Last 20 Lines |