From 5e00bb0b9f8f97b98c63f182b41441697e1cdcf2 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Sat, 7 Jan 2023 15:18:33 +0100 Subject: [PATCH] Kernel/aarch64: Change MMU::kernel_virtual_range to high virtual memory This was previously hardcoded this to be the physical memory range, since we identity mapped the memory, however we now run the kernel at a high virtual memory address. Also changes PageDirectory.h to store up-to 512 pages, as the code now needs access to more than 4 pages. --- Kernel/Memory/MemoryManager.cpp | 5 ++--- Kernel/Memory/PageDirectory.h | 4 ---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Kernel/Memory/MemoryManager.cpp b/Kernel/Memory/MemoryManager.cpp index 154dba1f77c..fb438671047 100644 --- a/Kernel/Memory/MemoryManager.cpp +++ b/Kernel/Memory/MemoryManager.cpp @@ -72,9 +72,8 @@ bool MemoryManager::is_initialized() static UNMAP_AFTER_INIT VirtualRange kernel_virtual_range() { #if ARCH(AARCH64) - // NOTE: We currently identity map the kernel image for aarch64, so the kernel virtual range - // is the complete memory range. - return VirtualRange { VirtualAddress((FlatPtr)0), 0x3F000000 }; + // NOTE: This is not the same as x86_64, because the aarch64 kernel currently doesn't use the pre-kernel. + return VirtualRange { VirtualAddress(kernel_mapping_base), KERNEL_PD_END - kernel_mapping_base }; #else size_t kernel_range_start = kernel_mapping_base + 2 * MiB; // The first 2 MiB are used for mapping the pre-kernel return VirtualRange { VirtualAddress(kernel_range_start), KERNEL_PD_END - kernel_range_start }; diff --git a/Kernel/Memory/PageDirectory.h b/Kernel/Memory/PageDirectory.h index 5ae014464cb..dfd707d5892 100644 --- a/Kernel/Memory/PageDirectory.h +++ b/Kernel/Memory/PageDirectory.h @@ -67,11 +67,7 @@ private: RefPtr m_pml4t; #endif RefPtr m_directory_table; -#if ARCH(X86_64) RefPtr m_directory_pages[512]; -#else - RefPtr m_directory_pages[4]; -#endif RecursiveSpinlock m_lock {}; };