fix: Fixed some issues regarding creating new page map levels #1

Merged
KevinAlavik merged 1 commit from main into main 2025-05-08 17:25:38 +00:00
4 changed files with 13 additions and 3 deletions

View file

@ -3,6 +3,7 @@
#include "mm/pmm.h" #include "mm/pmm.h"
#include "mm/vma.h" #include "mm/vma.h"
#include "mm/vmm.h" #include "mm/vmm.h"
#include "mm/liballoc/liballoc.h"
#include "mm/memop.h" #include "mm/memop.h"
#include "rt.h" #include "rt.h"
#include "sched/sched.h" #include "sched/sched.h"
@ -131,6 +132,11 @@ void kmain(void) {
asm("hlt"); asm("hlt");
} }
char *a = kmalloc(1);
*a = 32;
log("Allocated 1 byte at 0x%.16llx\n", (uint64_t)a);
kfree(a);
pit_init(1000); pit_init(1000);
sched_init(); sched_init();
//user_init(); //user_init();

View file

@ -1,6 +1,9 @@
// Copyright: Durand Miller <clutter@djm.co.za> // Copyright: Durand Miller <clutter@djm.co.za>
#include <mm/liballoc/liballoc.h> #include <mm/liballoc/liballoc.h>
// very dirty way of disabling logging in liballoc
#define log(...) (void)0
#define VERSION "1.1" #define VERSION "1.1"
#define ALIGNMENT 16ul #define ALIGNMENT 16ul

View file

@ -152,9 +152,10 @@ static uint64_t *__vmm_get_next_lvl(uint64_t *level, uint64_t entry, uint64_t fl
if (!(level[entry] & 1)){ if (!(level[entry] & 1)){
uint64_t *pml = HIGHER_HALF(pmm_request_page()); uint64_t *pml = HIGHER_HALF(pmm_request_page());
memset(pml, 0, PMM_PAGE_SIZE); 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])); return HIGHER_HALF(PTE_GET_ADDR(level[entry]));
} }

View file

@ -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)); log("ints - PF: Faulting page flags: %p\n", vmm_get_flags(vmm_current_pm, cr2));
} }
dump_backtrace(regs); // dump_backtrace(regs);
asm ("cli"); asm ("cli");
while (1) while (1)
asm ("hlt"); asm ("hlt");