Virtual address allocator
struct vas_range { vaddr_t start; size_t length; struct rbt_node node; struct list_head free_list_node;};struct vas_range referenced types:
struct vasrange_page_hdr { uint16_t free_count; uint16_t total; struct list_head page_list;};struct vasrange_page_hdr referenced types:
struct vas_local_tree { struct spinlock lock; struct rbt tree; struct list_head freelist; struct list_head fl_pages; size_t total_free;};struct vas_local_tree referenced types:
struct vas_space { struct vas_local_tree global; vaddr_t base; vaddr_t limit; size_t chunk_size; struct vas_local_tree *local;};struct vas_space referenced types:
struct vas_space * vas_space_bootstrap(vaddr_t base, vaddr_t limit);vas_space_bootstrap referenced types:
struct vas_space * vas_space_create(vaddr_t base, vaddr_t limit);vas_space_create referenced types:
struct vas_space * vas_space_from_address_range(struct address_range *ar);vas_space_from_address_range referenced types:
vaddr_t vas_alloc(struct vas_space *vas, size_t size, size_t align);vas_alloc referenced types:
void vas_free(struct vas_space *vas, vaddr_t addr, size_t size);vas_free referenced types:
void * vas_map(struct vas_space *vas, paddr_t paddr, size_t len, uint64_t flags, enum vmm_flags vflags);vas_map referenced types:
void vas_unmap(struct vas_space *vas, void *vaddr, size_t len);vas_unmap referenced types:
void vas_reclaim_freelist_pages(struct vas_local_tree *lt);vas_reclaim_freelist_pages referenced types:
Defines
Section titled “Defines”#define VAS_CHUNK_SIZE PAGE_1GB#define VAS_REFILL_THRESHOLD (VAS_CHUNK_SIZE / 4)