From d1d97094bc8e173a02b922aa050cbcda19361f59 Mon Sep 17 00:00:00 2001 From: Raghuram Subramani Date: Wed, 5 Feb 2025 11:00:44 +0530 Subject: mm: page_table_allocator: prepare()->initialize() --- kernel/mm/virtual_mm/page_table_allocator.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'kernel/mm/virtual_mm/page_table_allocator.cc') diff --git a/kernel/mm/virtual_mm/page_table_allocator.cc b/kernel/mm/virtual_mm/page_table_allocator.cc index 6a2a07e..a72cbe3 100644 --- a/kernel/mm/virtual_mm/page_table_allocator.cc +++ b/kernel/mm/virtual_mm/page_table_allocator.cc @@ -39,6 +39,7 @@ make_table(uint32_t *table_address) table[i] = PTE_FRAME((uint32_t) PhysicalMM::allocate_block()) | PTE_PRESENT(1) | PTE_WRITABLE(1); + /* TODO: Just find an unused pd_entry instead */ void *starting_address = VirtualMM::find_free_addresses(4 * KiB); uint32_t *pd_entry = &l_page_directory[GET_PD_INDEX(starting_address)]; *pd_entry = PDE_FRAME((uint32_t) table) | PDE_PRESENT(1) | PDE_WRITABLE(1); @@ -48,8 +49,11 @@ make_table(uint32_t *table_address) } void -prepare(void) +initialize(void) { + /* We can't just do this in allocate() because make_table() depends on + * VirtualMM::find_free_addresses() */ + if (l_page_directory != VirtualMM::get_page_directory()) l_page_directory = VirtualMM::get_page_directory(); -- cgit v1.2.3