hal x86_64 vmm minor fixes in mapping/unmapping

This commit is contained in:
2025-08-30 13:41:47 +02:00
parent 7a52f2f051
commit 60a530b900
2 changed files with 7 additions and 7 deletions

View File

@ -16,10 +16,10 @@ PgTable *hal_vmm_current_cr3(void) {
PgIndex hal_vmm_pageindex(uint64_t vaddr) { PgIndex hal_vmm_pageindex(uint64_t vaddr) {
PgIndex ret; PgIndex ret;
ret.pml4 = (vaddr & ((uint64_t)0x1ff < 39)) >> 39; ret.pml4 = (vaddr >> 39) & 0x1ff;
ret.pml3 = (vaddr & ((uint64_t)0x1ff < 30)) >> 30; ret.pml3 = (vaddr >> 30) & 0x1ff;
ret.pml2 = (vaddr & ((uint64_t)0x1ff < 21)) >> 21; ret.pml2 = (vaddr >> 21) & 0x1ff;
ret.pml1 = (vaddr & ((uint64_t)0x1ff < 12)) >> 12; ret.pml1 = (vaddr >> 12) & 0x1ff;
return ret; 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 *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2);
uint64_t *pte = &pml1[pi.pml1]; 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) { 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 *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2);
uint64_t *pte = &pml1[pi.pml1]; uint64_t *pte = &pml1[pi.pml1];
*pte = physaddr & (~0x7); *pte &= ~HAL_PG_PRESENT;
} }
void hal_vmm_init(void) { void hal_vmm_init(void) {

View File

@ -68,7 +68,7 @@ void kmain(void) {
hal_init_withmalloc(); hal_init_withmalloc();
/* hal_intr_enable(); */ /* hal_intr_enable(); */
/* kprintf(BANNER_TEXT "\n"); */ kprintf(BANNER_TEXT "\n");
for(;;); for(;;);
} }