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 | |
parent | cb90318893b2bbbfa22c1d656b3fb74765c62615 (diff) |
mm: page_table_allocator: prepare()->initialize()
-rw-r--r-- | kernel/include/mm/page_table_allocator.h | 2 | ||||
-rw-r--r-- | kernel/libk/liballoc.cc | 2 | ||||
-rw-r--r-- | kernel/mm/virtual_mm/page_table_allocator.cc | 6 | ||||
-rw-r--r-- | kernel/mm/virtual_mm/virtual_mm.cc | 2 |
4 files changed, 8 insertions, 4 deletions
diff --git a/kernel/include/mm/page_table_allocator.h b/kernel/include/mm/page_table_allocator.h index dc4deb6..4a0b0fb 100644 --- a/kernel/include/mm/page_table_allocator.h +++ b/kernel/include/mm/page_table_allocator.h @@ -25,7 +25,7 @@ namespace PageTableAllocator { uint32_t *allocate(void); -void prepare(void); +void initialize(void); } diff --git a/kernel/libk/liballoc.cc b/kernel/libk/liballoc.cc index 9437663..333b1b5 100644 --- a/kernel/libk/liballoc.cc +++ b/kernel/libk/liballoc.cc @@ -47,7 +47,7 @@ int l_completePages[MAXEXP]; //< Allowing for 2^MAXEXP blocks static unsigned int l_initialized = 0; //< Flag to indicate initialization. static unsigned int l_pageSize = 4096; //< Individual page size -static unsigned int l_pageCount = 1; //< Minimum number of pages to allocate. +static unsigned int l_pageCount = 16; //< Minimum number of pages to allocate. static inline int getexp(int size) 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(); diff --git a/kernel/mm/virtual_mm/virtual_mm.cc b/kernel/mm/virtual_mm/virtual_mm.cc index 2055481..b99b5ec 100644 --- a/kernel/mm/virtual_mm/virtual_mm.cc +++ b/kernel/mm/virtual_mm/virtual_mm.cc @@ -106,7 +106,7 @@ initialize(void) switch_page_directory(l_page_directory); enable_paging(); - PageTableAllocator::prepare(); + PageTableAllocator::initialize(); } uint32_t * |