diff --git a/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp b/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp index 0bbf51601d..5abd6b04b5 100644 --- a/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp +++ b/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2020, Andreas Kling + * Copyright (c) 2023, Timon Kruiper * * SPDX-License-Identifier: BSD-2-Clause */ @@ -13,23 +14,14 @@ namespace Kernel { ScopedAddressSpaceSwitcher::ScopedAddressSpaceSwitcher(Process& process) { VERIFY(Thread::current() != nullptr); -#if ARCH(X86_64) - m_previous_cr3 = read_cr3(); -#elif ARCH(AARCH64) - TODO_AARCH64(); -#endif + m_previous_page_directory = Memory::PageDirectory::find_current(); Memory::MemoryManager::enter_process_address_space(process); } ScopedAddressSpaceSwitcher::~ScopedAddressSpaceSwitcher() { InterruptDisabler disabler; -#if ARCH(X86_64) - Thread::current()->regs().cr3 = m_previous_cr3; - write_cr3(m_previous_cr3); -#elif ARCH(AARCH64) - TODO_AARCH64(); -#endif + Memory::activate_page_directory(*m_previous_page_directory, Thread::current()); } } diff --git a/Kernel/Memory/ScopedAddressSpaceSwitcher.h b/Kernel/Memory/ScopedAddressSpaceSwitcher.h index d547072931..a0c7ceb363 100644 --- a/Kernel/Memory/ScopedAddressSpaceSwitcher.h +++ b/Kernel/Memory/ScopedAddressSpaceSwitcher.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2020-2021, Andreas Kling + * Copyright (c) 2023, Timon Kruiper * * SPDX-License-Identifier: BSD-2-Clause */ @@ -7,6 +8,7 @@ #pragma once #include +#include #include namespace Kernel { @@ -17,7 +19,7 @@ public: ~ScopedAddressSpaceSwitcher(); private: - u32 m_previous_cr3 { 0 }; + LockRefPtr m_previous_page_directory; }; }