aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-02-05 11:00:44 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2025-02-05 11:00:44 +0530
commitd1d97094bc8e173a02b922aa050cbcda19361f59 (patch)
tree70dbd969d114d05fb05d07abf3cebb93cb15d1a0
parentcb90318893b2bbbfa22c1d656b3fb74765c62615 (diff)
mm: page_table_allocator: prepare()->initialize()
-rw-r--r--kernel/include/mm/page_table_allocator.h2
-rw-r--r--kernel/libk/liballoc.cc2
-rw-r--r--kernel/mm/virtual_mm/page_table_allocator.cc6
-rw-r--r--kernel/mm/virtual_mm/virtual_mm.cc2
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 *