vm: object: add prefetch function to fetch missing pages
This commit is contained in:
@@ -516,6 +516,33 @@ static kern_status_t request_page(
|
||||
return status;
|
||||
}
|
||||
|
||||
kern_status_t vm_object_prefetch(
|
||||
struct vm_object *vo,
|
||||
off_t offset,
|
||||
size_t length,
|
||||
unsigned long *irq_flags)
|
||||
{
|
||||
offset &= ~VM_PAGE_MASK;
|
||||
if (length & VM_PAGE_MASK) {
|
||||
length &= ~VM_PAGE_MASK;
|
||||
length += VM_PAGE_SIZE;
|
||||
}
|
||||
|
||||
for (off_t i = offset; i < offset + length; i += VM_PAGE_SIZE) {
|
||||
struct vm_page *pg = vm_object_get_page(
|
||||
vo,
|
||||
i,
|
||||
VMO_ALLOCATE_MISSING_PAGE | VMO_REQUEST_MISSING_PAGE,
|
||||
irq_flags);
|
||||
if (!pg) {
|
||||
/* TODO get error code from vm_object_get_page */
|
||||
return KERN_NO_MEMORY;
|
||||
}
|
||||
}
|
||||
|
||||
return KERN_OK;
|
||||
}
|
||||
|
||||
struct vm_page *vm_object_get_page(
|
||||
struct vm_object *vo,
|
||||
off_t offset,
|
||||
|
||||
Reference in New Issue
Block a user