fix: Fixed some issues regarding creating new page map levels #1
4 changed files with 13 additions and 3 deletions
|
@ -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();
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
// Copyright: Durand Miller <clutter@djm.co.za>
|
||||
#include <mm/liballoc/liballoc.h>
|
||||
|
||||
// very dirty way of disabling logging in liballoc
|
||||
#define log(...) (void)0
|
||||
|
||||
#define VERSION "1.1"
|
||||
#define ALIGNMENT 16ul
|
||||
|
||||
|
|
|
@ -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]));
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue