Kernel: Fix i686 page table global mappings

This commit is contained in:
Bananymous 2024-04-03 00:40:16 +03:00
parent 6ac3681604
commit d9b8391968
1 changed files with 3 additions and 13 deletions

View File

@ -117,16 +117,7 @@ namespace Kernel
ASSERT(s_global_pdpte == 0); ASSERT(s_global_pdpte == 0);
s_global_pdpte = V2P(allocate_zeroed_page_aligned_page()); s_global_pdpte = V2P(allocate_zeroed_page_aligned_page());
ASSERT(m_highest_paging_struct == 0); map_kernel_memory();
m_highest_paging_struct = V2P(kmalloc(32, 32, true));
ASSERT(m_highest_paging_struct);
uint64_t* pdpt = reinterpret_cast<uint64_t*>(P2V(m_highest_paging_struct));
pdpt[0] = 0;
pdpt[1] = 0;
pdpt[2] = 0;
pdpt[3] = s_global_pdpte;
static_assert(KERNEL_OFFSET == 0xC0000000);
prepare_fast_page(); prepare_fast_page();
@ -171,8 +162,7 @@ namespace Kernel
constexpr uint64_t pte = (fast_page() >> 12) & 0x1FF; constexpr uint64_t pte = (fast_page() >> 12) & 0x1FF;
uint64_t* pdpt = reinterpret_cast<uint64_t*>(P2V(m_highest_paging_struct)); uint64_t* pdpt = reinterpret_cast<uint64_t*>(P2V(m_highest_paging_struct));
ASSERT(!(pdpt[pdpte] & Flags::Present)); ASSERT(pdpt[pdpte] & Flags::Present);
pdpt[pdpte] = V2P(allocate_zeroed_page_aligned_page()) | Flags::Present;
uint64_t* pd = reinterpret_cast<uint64_t*>(P2V(pdpt[pdpte]) & PAGE_ADDR_MASK); uint64_t* pd = reinterpret_cast<uint64_t*>(P2V(pdpt[pdpte]) & PAGE_ADDR_MASK);
ASSERT(!(pd[pde] & Flags::Present)); ASSERT(!(pd[pde] & Flags::Present));
@ -247,7 +237,7 @@ namespace Kernel
pdpt[0] = 0; pdpt[0] = 0;
pdpt[1] = 0; pdpt[1] = 0;
pdpt[2] = 0; pdpt[2] = 0;
pdpt[3] = s_global_pdpte; pdpt[3] = s_global_pdpte | Flags::Present;
static_assert(KERNEL_OFFSET == 0xC0000000); static_assert(KERNEL_OFFSET == 0xC0000000);
} }