ProcessPagingScope.cpp 729 B

1234567891011121314151617181920212223242526272829303132
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/Arch/x86/InterruptDisabler.h>
  7. #include <Kernel/Panic.h>
  8. #include <Kernel/VM/MemoryManager.h>
  9. #include <Kernel/VM/ProcessPagingScope.h>
  10. namespace Kernel {
  11. ProcessPagingScope::ProcessPagingScope(Process& process)
  12. {
  13. VERIFY(Thread::current() != nullptr);
  14. m_previous_cr3 = read_cr3();
  15. MM.enter_process_paging_scope(process);
  16. }
  17. ProcessPagingScope::~ProcessPagingScope()
  18. {
  19. InterruptDisabler disabler;
  20. #if ARCH(I386)
  21. Thread::current()->tss().cr3 = m_previous_cr3;
  22. #else
  23. PANIC("ProcessPagingScope::~ProcessPagingScope() not implemented");
  24. #endif
  25. write_cr3(m_previous_cr3);
  26. }
  27. }