diff --git a/kernel/hal/x86_64/vmm.c b/kernel/hal/x86_64/vmm.c index f242aa1..c5b5e98 100644 --- a/kernel/hal/x86_64/vmm.c +++ b/kernel/hal/x86_64/vmm.c @@ -16,10 +16,10 @@ PgTable *hal_vmm_current_cr3(void) { PgIndex hal_vmm_pageindex(uint64_t vaddr) { PgIndex ret; - ret.pml4 = (vaddr & ((uint64_t)0x1ff < 39)) >> 39; - ret.pml3 = (vaddr & ((uint64_t)0x1ff < 30)) >> 30; - ret.pml2 = (vaddr & ((uint64_t)0x1ff < 21)) >> 21; - ret.pml1 = (vaddr & ((uint64_t)0x1ff < 12)) >> 12; + ret.pml4 = (vaddr >> 39) & 0x1ff; + ret.pml3 = (vaddr >> 30) & 0x1ff; + ret.pml2 = (vaddr >> 21) & 0x1ff; + ret.pml1 = (vaddr >> 12) & 0x1ff; return ret; } @@ -46,7 +46,7 @@ void hal_vmm_map_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr, uint3 uint64_t *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2); uint64_t *pte = &pml1[pi.pml1]; - *pte = physaddr | (flags & 0x7); + *pte = (physaddr & ~0xFFF) | (flags & 0x7); } void hal_vmm_unmap_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr) { @@ -57,7 +57,7 @@ void hal_vmm_unmap_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr) { uint64_t *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2); uint64_t *pte = &pml1[pi.pml1]; - *pte = physaddr & (~0x7); + *pte &= ~HAL_PG_PRESENT; } void hal_vmm_init(void) { diff --git a/kernel/kmain.c b/kernel/kmain.c index 7d19279..49ed0d5 100644 --- a/kernel/kmain.c +++ b/kernel/kmain.c @@ -68,7 +68,7 @@ void kmain(void) { hal_init_withmalloc(); /* hal_intr_enable(); */ - /* kprintf(BANNER_TEXT "\n"); */ + kprintf(BANNER_TEXT "\n"); for(;;); }