Kernel: fix i386 MMU

This commit is contained in:
Bananymous 2023-03-02 00:47:29 +02:00
parent 7fcbb869e1
commit 4d8bdec16d
1 changed files with 5 additions and 3 deletions

View File

@ -70,10 +70,12 @@ MMU::MMU()
void MMU::allocate_page(uintptr_t address, uint8_t flags) void MMU::allocate_page(uintptr_t address, uint8_t flags)
{ {
#if MMU_DEBUG_PRINT #if MMU_DEBUG_PRINT
dprintln("AllocatePage(0x{8H})", address & PAGE_MASK); dprintln("AllocatePage(0x{8H})", address);
#endif #endif
ASSERT(flags & Flags::Present); ASSERT(flags & Flags::Present);
address &= PAGE_MASK;
uint32_t pdpte = (address & 0xC0000000) >> 30; uint32_t pdpte = (address & 0xC0000000) >> 30;
uint32_t pde = (address & 0x3FE00000) >> 21; uint32_t pde = (address & 0x3FE00000) >> 21;
uint32_t pte = (address & 0x001FF000) >> 12; uint32_t pte = (address & 0x001FF000) >> 12;
@ -87,9 +89,9 @@ void MMU::allocate_page(uintptr_t address, uint8_t flags)
page_directory[pde] |= flags; page_directory[pde] |= flags;
uint64_t* page_table = (uint64_t*)(page_directory[pde] & PAGE_MASK); uint64_t* page_table = (uint64_t*)(page_directory[pde] & PAGE_MASK);
page_table[pte] = (address & PAGE_MASK) | Flags::ReadWrite | Flags::Present; page_table[pte] = address | flags;
asm volatile("invlpg (%0)" :: "r"(address & PAGE_MASK) : "memory"); asm volatile("invlpg (%0)" :: "r"(address) : "memory");
} }
void MMU::allocate_range(uintptr_t address, ptrdiff_t size, uint8_t flags) void MMU::allocate_range(uintptr_t address, ptrdiff_t size, uint8_t flags)