aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory/paging
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src/memory/paging')
-rw-r--r--arch/x86_64/src/memory/paging/page_table.cpp8
-rw-r--r--arch/x86_64/src/memory/paging/virtual_page.cpp5
2 files changed, 7 insertions, 6 deletions
diff --git a/arch/x86_64/src/memory/paging/page_table.cpp b/arch/x86_64/src/memory/paging/page_table.cpp
index 8345161..9857294 100644
--- a/arch/x86_64/src/memory/paging/page_table.cpp
+++ b/arch/x86_64/src/memory/paging/page_table.cpp
@@ -26,12 +26,8 @@ namespace teachos::arch::memory::paging
exception_handling::assert(current_level != LEVEL1,
"[Page Table] Attempted to call next_table on level 1 page table");
auto address = next_table_address(table_index);
-
- if (address.has_value())
- {
- current_table = reinterpret_cast<table_content *>(address.value());
- current_level = static_cast<level>(current_level - 1U);
- }
+ current_table = reinterpret_cast<table_content *>(address.value());
+ current_level = static_cast<level>(current_level - 1U);
}
auto page_table::operator[](std::size_t index) -> entry &
diff --git a/arch/x86_64/src/memory/paging/virtual_page.cpp b/arch/x86_64/src/memory/paging/virtual_page.cpp
index 3fb6caf..dcdec7f 100644
--- a/arch/x86_64/src/memory/paging/virtual_page.cpp
+++ b/arch/x86_64/src/memory/paging/virtual_page.cpp
@@ -19,4 +19,9 @@ namespace teachos::arch::memory::paging
}
auto virtual_page::start_address() const -> uint64_t { return page_number * allocator::PAGE_FRAME_SIZE; }
+
+ auto virtual_page::get_level_index(page_table::level level) const -> uint64_t
+ {
+ return (start_address() >> (level * 9U)) & 0x1FF;
+ }
} // namespace teachos::arch::memory::paging