diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-02-05 11:00:44 +0530 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-02-05 11:00:44 +0530 |
commit | d1d97094bc8e173a02b922aa050cbcda19361f59 (patch) | |
tree | 70dbd969d114d05fb05d07abf3cebb93cb15d1a0 /kernel/mm/virtual_mm/page_table_allocator.cc | |
parent | cb90318893b2bbbfa22c1d656b3fb74765c62615 (diff) |
mm: page_table_allocator: prepare()->initialize()
Diffstat (limited to 'kernel/mm/virtual_mm/page_table_allocator.cc')
-rw-r--r-- | kernel/mm/virtual_mm/page_table_allocator.cc | 6 |
1 files changed, 5 insertions, 1 deletions
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(); |