Skip to content

Virtual Memory Area

include/mem/vma_range.h View source View on GitHub
struct vma_range {
    struct rbit_node           mm_node;
    vaddr_t                    min_low;
    size_t                     max_gap;
    pgoff_t                    pgoff;
    enum vma_range_protection  prot;
    struct anon_vma            *anon_vma;
    struct mm                  *mm;
    struct list_head           anon_vma_chain;
};
enum vma_range_protection {
    VMA_PROT_READ = 1,
    VMA_PROT_WRITE = 1 << 1,
    VMA_PROT_EX = 1 << 2,
};
vaddr_t vma_range_start(const struct vma_range *vma_range);
vaddr_t vma_range_end(const struct vma_range *vma_range);
struct vma_range * vma_range_alloc(struct mm *mm, vaddr_t start, vaddr_t end, enum vma_range_protection prot);
void vma_range_free(struct vma_range *vma_range);
void vma_range_init(struct vma_range *vma_range, struct mm *mm, vaddr_t start, vaddr_t end, enum vma_range_protection prot);
struct vma_range * vma_range_find(struct mm *mm, vaddr_t addr);
struct vma_range * vma_range_find_intersection(struct mm *mm, vaddr_t s, vaddr_t e);
struct vma_range * vma_range_next(struct vma_range *vma_range);
struct vma_range * vma_range_prev(struct vma_range *vma_range);
enum errno vma_range_anon_prepare(struct vma_range *vma_range);
enum errno vma_range_expand(struct vma_range *vma_range, vaddr_t new_start, vaddr_t new_end);
struct vma_range * vma_range_merge(struct mm *mm, struct vma_range *prev, struct vma_range *vma_range);
enum errno vma_range_set_prot(struct vma_range *vma_range, enum vma_range_protection prot);
void vma_range_unmap_range(struct vma_range *vma_range, vaddr_t s, vaddr_t e);
void vma_range_teardown(struct vma_range *vma_range);
bool vma_range_is_anonymous(const struct vma_range *vma_range);
size_t vma_range_pages(const struct vma_range *vma_range);
struct vma_range * vma_range_split(struct vma_range *vma_range, vaddr_t addr);
struct vma_range * vma_range_dup(struct mm *dst_mm, const struct vma_range *src);
vaddr_t vma_range_address(const struct vma_range *vma_range, pgoff_t index);