aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-01-29 07:01:49 -0500
committerRaghuram Subramani <raghus2247@gmail.com>2025-01-29 07:01:49 -0500
commit87745d77a88e720da76bbaba9160a32bf690ac85 (patch)
tree9d39494c5ce84a20f3551264811dce2cba90b6e7
parent80dd2a5024ebb1ed2bba60bebb9c7ef00fa81114 (diff)
physical_mm: Set the first 4MiB to unusable
... consequently, move from using dynamic memory to static memory for the page table and directory
-rw-r--r--kernel/include/common.h1
-rw-r--r--kernel/mm/physical_mm/physical_mm.c13
-rw-r--r--kernel/mm/virtual_mm/virtual_mm.c19
3 files changed, 12 insertions, 21 deletions
diff --git a/kernel/include/common.h b/kernel/include/common.h
index 7f7f50f..7c5270a 100644
--- a/kernel/include/common.h
+++ b/kernel/include/common.h
@@ -21,6 +21,7 @@
#define ALWAYS_INLINE __attribute__((always_inline)) inline
#define PACKED __attribute__((packed))
+#define ALIGNED(x) __attribute__((aligned(x)))
#define KiB 1024
#define MiB (KiB * KiB)
diff --git a/kernel/mm/physical_mm/physical_mm.c b/kernel/mm/physical_mm/physical_mm.c
index e93593d..81656ed 100644
--- a/kernel/mm/physical_mm/physical_mm.c
+++ b/kernel/mm/physical_mm/physical_mm.c
@@ -22,17 +22,14 @@
/* TODO: Stack based allocation? */
-#include <stdatomic.h>
-#include <stdbool.h>
-#include <stdint.h>
-
+#include <kernel/halt.h>
+#include <kernel/spinlock.h>
#include <libk/stdio.h>
-
#include <mm/memory_map.h>
#include <mm/physical_mm.h>
-
-#include <kernel/halt.h>
-#include <kernel/spinlock.h>
+#include <stdatomic.h>
+#include <stdbool.h>
+#include <stdint.h>
extern uint32_t kernel_start;
extern uint32_t kernel_end;
diff --git a/kernel/mm/virtual_mm/virtual_mm.c b/kernel/mm/virtual_mm/virtual_mm.c
index 4bdb4ab..3043686 100644
--- a/kernel/mm/virtual_mm/virtual_mm.c
+++ b/kernel/mm/virtual_mm/virtual_mm.c
@@ -16,20 +16,22 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-
#include <kernel/halt.h>
-
#include <libk/stdio.h>
-
#include <mm/physical_mm.h>
#include <mm/virtual_mm.h>
+#include <stdint.h>
extern uint32_t kernel_start;
extern uint32_t kernel_end;
uint32_t *current_page_directory = 0;
+/* Kernel's page directory */
+uint32_t page_directory[1024] ALIGNED(4096);
+/* Page table for the first 4 MiB */
+uint32_t table[1024] ALIGNED(4096);
+
ALWAYS_INLINE void
virtual_mm_load_page_directory(uint32_t *page_directory)
{
@@ -59,10 +61,6 @@ virtual_mm_enable_paging(void)
void
virtual_mm_initialize(void)
{
- uint32_t *table = physical_mm_allocate_block();
- if (!table)
- ASSERT_NOT_REACHED();
-
for (uint32_t i = 0; i < 1024; i++)
table[i] = 0;
@@ -71,11 +69,6 @@ virtual_mm_initialize(void)
for (uint32_t i = 0; i < 1024; i++)
table[i] = PTE_FRAME(i) | PTE_PRESENT(1) | PTE_WRITABLE(1);
- uint32_t *page_directory = physical_mm_allocate_block();
- if (!page_directory)
- ASSERT_NOT_REACHED();
- printk("debug", "Page directory is at: 0x%x", page_directory);
-
for (uint32_t i = 0; i < 1024; i++)
page_directory[i] = 0;