From 6488abfcba14a448f4f755f85c0fdf17be2289e5 Mon Sep 17 00:00:00 2001 From: Kevin Alavik Date: Thu, 8 May 2025 19:22:40 +0200 Subject: [PATCH] fix: Fixed some issues regarding creating new page map levels --- kernel/src/main.c | 6 ++++++ kernel/src/mm/liballoc/liballoc.c | 3 +++ kernel/src/mm/vmm.c | 5 +++-- kernel/src/sys/arch/x86_64/interrupts.c | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/kernel/src/main.c b/kernel/src/main.c index 7541359..609e30e 100755 --- a/kernel/src/main.c +++ b/kernel/src/main.c @@ -3,6 +3,7 @@ #include "mm/pmm.h" #include "mm/vma.h" #include "mm/vmm.h" +#include "mm/liballoc/liballoc.h" #include "mm/memop.h" #include "rt.h" #include "sched/sched.h" @@ -131,6 +132,11 @@ void kmain(void) { asm("hlt"); } + char *a = kmalloc(1); + *a = 32; + log("Allocated 1 byte at 0x%.16llx\n", (uint64_t)a); + kfree(a); + pit_init(1000); sched_init(); //user_init(); diff --git a/kernel/src/mm/liballoc/liballoc.c b/kernel/src/mm/liballoc/liballoc.c index b93d846..567196f 100644 --- a/kernel/src/mm/liballoc/liballoc.c +++ b/kernel/src/mm/liballoc/liballoc.c @@ -1,6 +1,9 @@ // Copyright: Durand Miller #include +// very dirty way of disabling logging in liballoc +#define log(...) (void)0 + #define VERSION "1.1" #define ALIGNMENT 16ul diff --git a/kernel/src/mm/vmm.c b/kernel/src/mm/vmm.c index 1771ffc..fdaf2a3 100755 --- a/kernel/src/mm/vmm.c +++ b/kernel/src/mm/vmm.c @@ -152,9 +152,10 @@ static uint64_t *__vmm_get_next_lvl(uint64_t *level, uint64_t entry, uint64_t fl if (!(level[entry] & 1)){ uint64_t *pml = HIGHER_HALF(pmm_request_page()); memset(pml, 0, PMM_PAGE_SIZE); - level[entry] = (uint64_t)PHYSICAL(pml); + level[entry] = ((uint64_t)PHYSICAL(pml) & 0x000FFFFFFFFFF000ULL) | flags; + } else { + level[entry] |= (flags & ~VMM_NX) & 0xFF; } - level[entry] |= (flags & 0xFFF); // N'ajoute que les flags pertinents return HIGHER_HALF(PTE_GET_ADDR(level[entry])); } diff --git a/kernel/src/sys/arch/x86_64/interrupts.c b/kernel/src/sys/arch/x86_64/interrupts.c index 26d277e..968c7a3 100755 --- a/kernel/src/sys/arch/x86_64/interrupts.c +++ b/kernel/src/sys/arch/x86_64/interrupts.c @@ -47,7 +47,7 @@ void exception_handler(registers_t *regs) { log("ints - PF: Faulting page flags: %p\n", vmm_get_flags(vmm_current_pm, cr2)); } - dump_backtrace(regs); + // dump_backtrace(regs); asm ("cli"); while (1) asm ("hlt"); -- 2.39.5