sandbox: vm: add function to iterate though pages in a hugepage
This commit is contained in:
@@ -19,6 +19,9 @@
|
||||
|
||||
#define VM_PAGE_IS_RESERVED(pg) ((pg)->p_flags & VM_PAGE_RESERVED)
|
||||
|
||||
#define vm_page_foreach(pg, i) \
|
||||
for (vm_page_t *i = (pg); i; i = vm_page_get_next_tail(i))
|
||||
|
||||
typedef phys_addr_t vm_alignment_t;
|
||||
typedef unsigned int vm_node_id_t;
|
||||
|
||||
@@ -138,6 +141,7 @@ extern void vm_page_free(vm_page_t *pg);
|
||||
extern int vm_page_split(vm_page_t *pg, vm_page_t **a, vm_page_t **b);
|
||||
extern vm_page_t *vm_page_merge(vm_page_t *a, vm_page_t *b);
|
||||
extern vm_page_t *vm_page_get_buddy(vm_page_t *pg);
|
||||
extern vm_page_t *vm_page_get_next_tail(vm_page_t *pg);
|
||||
|
||||
extern size_t vm_bytes_to_pages(size_t bytes);
|
||||
|
||||
|
||||
@@ -260,3 +260,13 @@ vm_page_t *vm_page_get_buddy(vm_page_t *pg)
|
||||
paddr = paddr ^ vm_page_order_to_bytes(pg->p_order);
|
||||
return vm_page_get(paddr);
|
||||
}
|
||||
|
||||
vm_page_t *vm_page_get_next_tail(vm_page_t *pg)
|
||||
{
|
||||
vm_page_t *next = pg + 1;
|
||||
if (next->p_flags & VM_PAGE_HEAD || !(next->p_flags & VM_PAGE_HUGE)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user