diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 11:29:42 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 11:29:42 +0100 |
| commit | 5c251debfbef98360f2e00c938ef88d652469493 (patch) | |
| tree | 78d5a4c1503fd38f6dec64b10792c3bda90762b3 | |
| parent | 913f40cbf8e578323009c0dcd6a22e99668a0010 (diff) | |
| download | teachos-5c251debfbef98360f2e00c938ef88d652469493.tar.xz teachos-5c251debfbef98360f2e00c938ef88d652469493.zip | |
x86_64/memory: fix page table flag setting
| -rw-r--r-- | arch/x86_64/include/arch/memory/page_table.hpp | 2 | ||||
| -rw-r--r-- | arch/x86_64/kapi/memory.cpp | 4 | ||||
| -rw-r--r-- | kernel/kapi/memory.cpp | 2 | ||||
| -rw-r--r-- | kernel/src/memory/block_list_allocator.cpp | 3 |
4 files changed, 6 insertions, 5 deletions
diff --git a/arch/x86_64/include/arch/memory/page_table.hpp b/arch/x86_64/include/arch/memory/page_table.hpp index 778c201..e00e0a4 100644 --- a/arch/x86_64/include/arch/memory/page_table.hpp +++ b/arch/x86_64/include/arch/memory/page_table.hpp @@ -334,7 +334,7 @@ namespace arch::memory result |= table_flags::disable_cache; } - if ((flags & mapper_flags::supervisor_only) != mapper_flags::empty) + if ((flags & mapper_flags::supervisor_only) == mapper_flags::empty) { result |= table_flags::user_accessible; } diff --git a/arch/x86_64/kapi/memory.cpp b/arch/x86_64/kapi/memory.cpp index 6bbfad3..11bc69c 100644 --- a/arch/x86_64/kapi/memory.cpp +++ b/arch/x86_64/kapi/memory.cpp @@ -138,7 +138,7 @@ namespace kapi::memory auto page = page::containing(vga_virtual_start); auto frame = frame::containing(vga_physical_start); - mapper.map(page, frame, page_mapper::flags::writable); + mapper.map(page, frame, page_mapper::flags::writable | page_mapper::flags::supervisor_only); } auto remap_multiboot_information(page_mapper & mapper) -> void @@ -153,7 +153,7 @@ namespace kapi::memory { auto page = page::containing(mbi_virtual_start) + i; auto frame = frame::containing(mbi_physical_start) + i; - mapper.map(page, frame, page_mapper::flags::empty); + mapper.map(page, frame, page_mapper::flags::supervisor_only); } } diff --git a/kernel/kapi/memory.cpp b/kernel/kapi/memory.cpp index b1fb616..d8065d4 100644 --- a/kernel/kapi/memory.cpp +++ b/kernel/kapi/memory.cpp @@ -121,7 +121,7 @@ namespace kapi::memory system::panic("[OS:MEM] Not enough memory for bitmap allocator!"); } - auto const flags = page_mapper::flags::writable | page_mapper::flags::supervisor_only; + auto const flags = page_mapper::flags::writable | page_mapper::flags::supervisor_only | page_mapper::flags::global; std::ranges::for_each(std::views::iota(0uz, bitmap_pages), [&](auto index) { auto page = page::containing(pmm_metadata_base + index * page::size); diff --git a/kernel/src/memory/block_list_allocator.cpp b/kernel/src/memory/block_list_allocator.cpp index 06b4581..be83236 100644 --- a/kernel/src/memory/block_list_allocator.cpp +++ b/kernel/src/memory/block_list_allocator.cpp @@ -93,7 +93,8 @@ namespace kernel::memory auto const total_required_size = size + sizeof(block_header); auto const frames_needed = (total_required_size + kapi::memory::frame::size - 1) / kapi::memory::frame::size; - auto const flags = kapi::memory::page_mapper::flags::writable | kapi::memory::page_mapper::flags::supervisor_only; + auto const flags = kapi::memory::page_mapper::flags::writable | kapi::memory::page_mapper::flags::supervisor_only | + kapi::memory::page_mapper::flags::global; for (auto i = 0uz; i < frames_needed; ++i) { |
