aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2025-05-05 11:27:29 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2025-05-05 11:27:29 +0000
commit7d2e8bc16e6c1bacb3c676d21ea2245d8132218f (patch)
treee43e0c3e43f0288cf721de56f0ac33aac9dddbc0 /arch/x86_64/src/memory
parent27d4fb90ebbc754e98ff68ce5bc7839a44ed99c1 (diff)
downloadteachos-7d2e8bc16e6c1bacb3c676d21ea2245d8132218f.tar.xz
teachos-7d2e8bc16e6c1bacb3c676d21ea2245d8132218f.zip
Remove the addition of USER_ACCESSIBLE flag to every entry created
Diffstat (limited to 'arch/x86_64/src/memory')
-rw-r--r--arch/x86_64/src/memory/main.cpp3
-rw-r--r--arch/x86_64/src/memory/paging/inactive_page_table.cpp2
-rw-r--r--arch/x86_64/src/memory/paging/page_entry.cpp10
-rw-r--r--arch/x86_64/src/memory/paging/temporary_page.cpp10
4 files changed, 12 insertions, 13 deletions
diff --git a/arch/x86_64/src/memory/main.cpp b/arch/x86_64/src/memory/main.cpp
index bd094e0..4cccabb 100644
--- a/arch/x86_64/src/memory/main.cpp
+++ b/arch/x86_64/src/memory/main.cpp
@@ -31,7 +31,8 @@ namespace teachos::arch::memory
for (auto const & page : pages)
{
- active_table.map_page_to_next_free_frame(allocator, page, paging::entry::WRITABLE);
+ active_table.map_page_to_next_free_frame(allocator, page,
+ paging::entry::WRITABLE | paging::entry::USER_ACCESSIBLE);
}
}
} // namespace
diff --git a/arch/x86_64/src/memory/paging/inactive_page_table.cpp b/arch/x86_64/src/memory/paging/inactive_page_table.cpp
index 4e0610e..780f12c 100644
--- a/arch/x86_64/src/memory/paging/inactive_page_table.cpp
+++ b/arch/x86_64/src/memory/paging/inactive_page_table.cpp
@@ -14,7 +14,7 @@ namespace teachos::arch::memory::paging
{
auto table = temporary_page.map_table_frame(page_table_level_4_frame, active_page_table);
table.zero_entries();
- table[511].set_entry(page_table_level_4_frame, entry::PRESENT | entry::WRITABLE);
+ table[511].set_entry(page_table_level_4_frame, entry::PRESENT | entry::WRITABLE | entry::USER_ACCESSIBLE);
temporary_page.unmap_page(active_page_table);
}
} // namespace teachos::arch::memory::paging
diff --git a/arch/x86_64/src/memory/paging/page_entry.cpp b/arch/x86_64/src/memory/paging/page_entry.cpp
index 3a0f03f..c76c673 100644
--- a/arch/x86_64/src/memory/paging/page_entry.cpp
+++ b/arch/x86_64/src/memory/paging/page_entry.cpp
@@ -10,7 +10,7 @@ namespace teachos::arch::memory::paging
} // namespace
entry::entry(uint64_t flags)
- : flags(flags | entry::USER_ACCESSIBLE) // TODO: Temporarily make all entries user accessible
+ : flags(flags)
{
// Nothing to do.
}
@@ -31,15 +31,14 @@ namespace teachos::arch::memory::paging
{
flags |= entry::EXECUTING_CODE_FORBIDDEN;
}
-
- // TODO: Temporarily make all entries user accessible
- flags |= entry::USER_ACCESSIBLE;
}
auto entry::is_unused() const -> bool { return flags == 0U; }
auto entry::set_unused() -> void { flags = 0U; }
+ auto entry::set_user_accesible() -> void { flags |= entry::USER_ACCESSIBLE; }
+
auto entry::calculate_pointed_to_frame() const -> std::optional<allocator::physical_frame>
{
if (contains_flags(PRESENT))
@@ -57,8 +56,7 @@ namespace teachos::arch::memory::paging
exception_handling::assert((frame.start_address() & ~PHYSICAL_ADDRESS_MASK) == 0,
"[Paging Entry] Start address is not aligned with page");
- // TODO: Temporarily make all entries user accessible
- flags = frame.start_address() | additional_flags.to_ulong() | entry::USER_ACCESSIBLE;
+ flags = frame.start_address() | additional_flags.to_ulong();
}
auto entry::get_flags() const -> std::bitset<64U> { return flags.to_ulong() & ~PHYSICAL_ADDRESS_MASK; }
diff --git a/arch/x86_64/src/memory/paging/temporary_page.cpp b/arch/x86_64/src/memory/paging/temporary_page.cpp
index 152241d..9946f36 100644
--- a/arch/x86_64/src/memory/paging/temporary_page.cpp
+++ b/arch/x86_64/src/memory/paging/temporary_page.cpp
@@ -4,21 +4,21 @@
namespace teachos::arch::memory::paging
{
- auto temporary_page::map_table_frame(allocator::physical_frame frame,
- active_page_table & active_table) -> page_table_handle
+ auto temporary_page::map_table_frame(allocator::physical_frame frame, active_page_table & active_table)
+ -> page_table_handle
{
page_table_handle handle{reinterpret_cast<page_table *>(map_to_frame(frame, active_table)),
page_table_handle::LEVEL1};
return handle;
}
- auto temporary_page::map_to_frame(allocator::physical_frame frame,
- active_page_table & active_table) -> virtual_address
+ auto temporary_page::map_to_frame(allocator::physical_frame frame, active_page_table & active_table)
+ -> virtual_address
{
exception_handling::assert(!active_table.translate_page(page).has_value(),
"[Temporary page] Page is already mapped");
- active_table.map_page_to_frame(allocator, page, frame, entry::WRITABLE);
+ active_table.map_page_to_frame(allocator, page, frame, entry::WRITABLE | entry::USER_ACCESSIBLE);
return page.start_address();
}