Skip to content

Buddy allocator

include/mem/buddy.h View source View on GitHub
struct buddy_free_area {
    struct buddy_page  *head;
    struct buddy_page  *tail;
    uint64_t           nr_free;
};
void buddy_add_to_free_area(struct buddy_page *page, struct buddy_free_area *area);
struct buddy_page * buddy_remove_from_free_area(struct buddy_free_area *area);
paddr_t buddy_alloc_pages_global(size_t count, enum alloc_flags flags);
void buddy_free_pages_global(paddr_t addr, uint64_t count);
void buddy_add_entry(struct page *page_array, struct limine_memmap_entry *entry, struct buddy_free_area *farea);
void buddy_reserve_range(uint64_t pfn, uint64_t pages);
paddr_t buddy_alloc_pages(struct buddy_free_area *free_area, size_t count);
void buddy_free_pages(paddr_t addr, size_t count, struct buddy_free_area *free_area, size_t total_pages);
void buddy_init(void);
#define BUDDY_MAX_ORDER 18