diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index f39829c474..cca4cf4e32 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -408,8 +408,9 @@ PageFaultResponse MemoryManager::handle_page_fault(const PageFault& fault) if (fault.is_not_present() && fault.vaddr().get() >= 0xc0000000) { u32 page_directory_index = (fault.vaddr().get() >> 22) & 0x3ff; if (kernel_page_directory().entries()[page_directory_index].is_present()) { - current->process().page_directory().entries()[page_directory_index].copy_from({}, kernel_page_directory().entries()[page_directory_index]); dbgprintf("NP(kernel): copying new kernel mapping for L%x into process\n", fault.vaddr().get()); + current->process().page_directory().entries()[page_directory_index].copy_from({}, kernel_page_directory().entries()[page_directory_index]); + flush_tlb(fault.vaddr().page_base()); return PageFaultResponse::Continue; } } diff --git a/Kernel/VM/VirtualAddress.h b/Kernel/VM/VirtualAddress.h index 9bfe838c5e..fffc136a61 100644 --- a/Kernel/VM/VirtualAddress.h +++ b/Kernel/VM/VirtualAddress.h @@ -28,7 +28,7 @@ public: u8* as_ptr() { return reinterpret_cast(m_address); } const u8* as_ptr() const { return reinterpret_cast(m_address); } - u32 page_base() const { return m_address & 0xfffff000; } + VirtualAddress page_base() const { return VirtualAddress(m_address & 0xfffff000); } private: u32 m_address { 0 };