aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/kernel/main.cpp6
-rw-r--r--arch/x86_64/src/memory/allocator/area_frame_allocator.cpp8
-rw-r--r--arch/x86_64/src/memory/paging/page_entry.cpp3
-rw-r--r--arch/x86_64/src/memory/paging/page_mapper.cpp4
4 files changed, 15 insertions, 6 deletions
diff --git a/arch/x86_64/src/kernel/main.cpp b/arch/x86_64/src/kernel/main.cpp
index e067b48..5c55213 100644
--- a/arch/x86_64/src/kernel/main.cpp
+++ b/arch/x86_64/src/kernel/main.cpp
@@ -28,9 +28,13 @@ namespace teachos::arch::kernel
video::vga::text::write("Mapped physical frame: ", video::vga::text::common_attributes::green_on_black);
video::vga::text::write_number(optional_frame.value().frame_number,
video::vga::text::common_attributes::green_on_black);
+ video::vga::text::write(" to virtual page: ", video::vga::text::common_attributes::green_on_black);
+ video::vga::text::write_number(page.page_number, video::vga::text::common_attributes::green_on_black);
memory::paging::unmap_page(allocator, page);
- video::vga::text::write("Unapped physical page: ", video::vga::text::common_attributes::green_on_black);
+ video::vga::text::newline();
+ video::vga::text::write("Unapped virtual page from physical frame: ",
+ video::vga::text::common_attributes::green_on_black);
optional_frame = memory::paging::translate_page(page);
exception_handling::assert(!optional_frame.has_value(), "[Main] Ummapping failed");
video::vga::text::write_number(page.page_number, video::vga::text::common_attributes::green_on_black);
diff --git a/arch/x86_64/src/memory/allocator/area_frame_allocator.cpp b/arch/x86_64/src/memory/allocator/area_frame_allocator.cpp
index 6ec3e95..fecc6cd 100644
--- a/arch/x86_64/src/memory/allocator/area_frame_allocator.cpp
+++ b/arch/x86_64/src/memory/allocator/area_frame_allocator.cpp
@@ -85,7 +85,11 @@ namespace teachos::arch::memory::allocator
auto area_frame_allocator::deallocate_frame(physical_frame physical_frame) -> void
{
- exception_handling::assert(false && physical_frame.frame_number == 0,
- "[deallocate_frame] Not implemented Exception");
+ // TODO: Implement deallocation to make unmap actually work.
+ if (physical_frame.frame_number == 0)
+ {
+ }
+ /*exception_handling::assert(false && physical_frame.frame_number == 0,
+ "[deallocate_frame] Not implemented Exception");*/
}
} // namespace teachos::arch::memory::allocator
diff --git a/arch/x86_64/src/memory/paging/page_entry.cpp b/arch/x86_64/src/memory/paging/page_entry.cpp
index 8923fea..23c700f 100644
--- a/arch/x86_64/src/memory/paging/page_entry.cpp
+++ b/arch/x86_64/src/memory/paging/page_entry.cpp
@@ -23,7 +23,8 @@ namespace teachos::arch::memory::paging
{
if (contains_flags(PRESENT))
{
- return allocator::physical_frame::containing_address(flags.to_ulong() & PHYSICAL_ADDRESS_MASK);
+ auto const address = flags.to_ulong() & PHYSICAL_ADDRESS_MASK;
+ return allocator::physical_frame::containing_address(address);
}
return std::nullopt;
}
diff --git a/arch/x86_64/src/memory/paging/page_mapper.cpp b/arch/x86_64/src/memory/paging/page_mapper.cpp
index 3baf6ae..0a1fc65 100644
--- a/arch/x86_64/src/memory/paging/page_mapper.cpp
+++ b/arch/x86_64/src/memory/paging/page_mapper.cpp
@@ -55,8 +55,8 @@ namespace teachos::arch::memory::paging
}
auto const level1_index = page.get_level_index(page_table_handle::LEVEL1);
- auto const level1_frame = current_handle[level1_index].calculate_pointed_to_frame();
- return level1_frame;
+ auto const level1_entry = current_handle[level1_index];
+ return level1_entry.calculate_pointed_to_frame();
}
auto translate_huge_page(virtual_page page) -> std::optional<allocator::physical_frame>