Skip to content

Virtual address allocator

struct vas * vas_bootstrap(vaddr_t base, vaddr_t limit)
source

[base, limit)

struct vas * vas_create(vaddr_t base, vaddr_t limit)
source
struct vas * vas_from(struct address_range *ar)
source
struct vas * vas_bootstrap_from(struct address_range *ar)
source
vaddr_t vas_alloc(struct vas *vas, size_t size, size_t align)
source

No touching in interrupts or above DISPATCH

void vas_free(struct vas *vas, vaddr_t addr, size_t size)
source

Giving the wrong size panics. TODO: we only need to pass in addr, we can update the APIs for that later on

void * vas_map_full(
    struct vas *vas,
    paddr_t paddr,
    size_t len,
    struct vmm_request rq
)
source
void vas_unmap(struct vas *vas, void *vaddr, size_t len)
source

Drain cached reservations

void vas_reclaim(struct vas *vas)
source
void vas_reclaim_freelist_pages(struct vas_arena *arena)
source
bool vas_destroy(struct vas *vas)
source
TODO

virtual address spaces are NOT refcounted

void vas_space_dump(struct vas *vas)
source
bool vas_vaddr_in_vas(struct vas *vas, vaddr_t addr)
source
bool vas_vaddr_is_allocated(struct vas *vas, vaddr_t addr)
source

Includes interior byte addresses

#define VAS_CHUNK_SHIFT 26
source
#define VAS_CHUNK_SIZE BIT(VAS_CHUNK_SHIFT)
source
#define vas_map(vas, paddr, len, ...)
source
Expansion
#define vas_map(vas, paddr, len, ...) \
    vas_map_full((vas), (paddr), (len), vmm_request_with_defaults(__VA_ARGS__))