Kernel: Change PageTable API
Getting free pages not reserves them, so you don't have to hold the page table lock :)
This commit is contained in:
@@ -43,8 +43,11 @@ namespace Kernel
|
||||
bool is_page_free(vaddr_t) const;
|
||||
bool is_range_free(vaddr_t, size_t bytes) const;
|
||||
|
||||
vaddr_t get_free_page(vaddr_t first_address = PAGE_SIZE);
|
||||
vaddr_t get_free_contiguous_pages(size_t page_count, vaddr_t first_address = PAGE_SIZE);
|
||||
bool reserve_page(vaddr_t, bool only_free = true);
|
||||
bool reserve_range(vaddr_t, size_t bytes, bool only_free = true);
|
||||
|
||||
vaddr_t reserve_free_page(vaddr_t first_address, vaddr_t last_address = UINTPTR_MAX);
|
||||
vaddr_t reserve_free_contiguous_pages(size_t page_count, vaddr_t first_address, vaddr_t last_address = UINTPTR_MAX);
|
||||
|
||||
void load();
|
||||
|
||||
|
||||
@@ -14,7 +14,11 @@ namespace Kernel
|
||||
BAN_NON_MOVABLE(VirtualRange);
|
||||
|
||||
public:
|
||||
static BAN::ErrorOr<BAN::UniqPtr<VirtualRange>> create(PageTable&, vaddr_t, size_t, uint8_t flags);
|
||||
// Create virtual range to fixed virtual address
|
||||
static BAN::ErrorOr<BAN::UniqPtr<VirtualRange>> create_to_vaddr(PageTable&, vaddr_t, size_t, uint8_t flags);
|
||||
// Create virtual range to virtual address range
|
||||
static BAN::ErrorOr<BAN::UniqPtr<VirtualRange>> create_to_vaddr_range(PageTable&, vaddr_t vaddr_start, vaddr_t vaddr_end, size_t, uint8_t flags);
|
||||
// Create virtual range in kernel memory with kmalloc
|
||||
static BAN::ErrorOr<BAN::UniqPtr<VirtualRange>> create_kmalloc(size_t);
|
||||
~VirtualRange();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user