Skip to content

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:

#define VAS_CHUNK_SIZE PAGE_1GB
#define VAS_REFILL_THRESHOLD (VAS_CHUNK_SIZE / 4)