diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-29 07:01:49 -0500 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-29 07:01:49 -0500 |
commit | 87745d77a88e720da76bbaba9160a32bf690ac85 (patch) | |
tree | 9d39494c5ce84a20f3551264811dce2cba90b6e7 | |
parent | 80dd2a5024ebb1ed2bba60bebb9c7ef00fa81114 (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.h | 1 | ||||
-rw-r--r-- | kernel/mm/physical_mm/physical_mm.c | 13 | ||||
-rw-r--r-- | kernel/mm/virtual_mm/virtual_mm.c | 19 |
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; |