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_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 phys_addr_t vm_alignment_t;
|
||||||
typedef unsigned int vm_node_id_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 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_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_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);
|
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);
|
paddr = paddr ^ vm_page_order_to_bytes(pg->p_order);
|
||||||
return vm_page_get(paddr);
|
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