aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory/scoped_mapping.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-12-12 14:07:28 +0100
committerFelix Morgner <felix.morgner@ost.ch>2025-12-12 14:07:28 +0100
commit50c9c9a1d963e66f7658ab31e9ecd65bf227cfff (patch)
tree7b16e1cbf5aafaa1f5a5d814cac96bb283009e0c /arch/x86_64/src/memory/scoped_mapping.cpp
parent8fc5f9e3cc28b07b1f120eb1ffedc042fa6662b8 (diff)
downloadkernel-50c9c9a1d963e66f7658ab31e9ecd65bf227cfff.tar.xz
kernel-50c9c9a1d963e66f7658ab31e9ecd65bf227cfff.zip
x86_64/memory: clean up dependencies
Diffstat (limited to 'arch/x86_64/src/memory/scoped_mapping.cpp')
-rw-r--r--arch/x86_64/src/memory/scoped_mapping.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/x86_64/src/memory/scoped_mapping.cpp b/arch/x86_64/src/memory/scoped_mapping.cpp
index e243dc9..fa68387 100644
--- a/arch/x86_64/src/memory/scoped_mapping.cpp
+++ b/arch/x86_64/src/memory/scoped_mapping.cpp
@@ -14,14 +14,16 @@ namespace teachos::memory::x86_64
scoped_mapping::scoped_mapping(scoped_mapping && other) noexcept
: m_page{std::exchange(other.m_page, page{})}
+ , m_mapper{std::exchange(other.m_mapper, nullptr)}
, m_mapped{std::exchange(other.m_mapped, false)}
{}
- scoped_mapping::scoped_mapping(page page)
+ scoped_mapping::scoped_mapping(page page, page_mapper & mapper)
: m_page{page}
+ , m_mapper{&mapper}
, m_mapped{false}
{
- if (paging_root::get().translate(page))
+ if (paging_root::get()->translate(page))
{
system::panic("[MEM] Tried to map a page that is already mapped!");
}
@@ -44,14 +46,14 @@ namespace teachos::memory::x86_64
auto scoped_mapping::map(frame frame, page_table::entry::flags flags) -> std::byte *
{
- auto result = active_page_mapper().map(m_page, frame, to_mapper_flags(flags));
+ auto result = m_mapper->map(m_page, frame, to_mapper_flags(flags));
m_mapped = true;
return result;
}
auto scoped_mapping::unmap() -> void
{
- active_page_mapper().unmap(m_page);
+ m_mapper->unmap(m_page);
m_mapped = false;
}
@@ -59,6 +61,7 @@ namespace teachos::memory::x86_64
{
using std::swap;
swap(lhs.m_page, rhs.m_page);
+ swap(lhs.m_mapper, rhs.m_mapper);
swap(lhs.m_mapped, rhs.m_mapped);
}