aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi/memory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kapi/memory.cpp')
-rw-r--r--kernel/kapi/memory.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/kapi/memory.cpp b/kernel/kapi/memory.cpp
index d657527..767bcd7 100644
--- a/kernel/kapi/memory.cpp
+++ b/kernel/kapi/memory.cpp
@@ -101,9 +101,9 @@ namespace kapi::memory
return get_frame_allocator().allocate_many(count);
}
- auto map(page page, frame frame) -> std::byte *
+ auto map(page page, frame frame, page_mapper::flags flags) -> std::byte *
{
- return active_page_mapper->map(page, frame, page_mapper::flags::empty);
+ return active_page_mapper->map(page, frame, flags);
}
auto unmap(page page) -> void
@@ -122,16 +122,15 @@ namespace kapi::memory
system::panic("[OS:MEM] Not enough memory for bitmap allocator!");
}
- auto const base_address = pmm_metadata_base.raw();
auto const flags = page_mapper::flags::writable | page_mapper::flags::supervisor_only;
std::ranges::for_each(std::views::iota(0uz, bitmap_pages), [&](auto index) {
- auto page = page::containing(linear_address{base_address + index * page::size});
+ auto page = page::containing(pmm_metadata_base + index * page::size);
auto frame = memory::frame(bitmap_frames->first.number() + index);
active_page_mapper->map(page, frame, flags);
});
- auto bitmap_ptr = std::bit_cast<std::uint64_t *>(base_address);
+ auto bitmap_ptr = std::bit_cast<std::uint64_t *>(pmm_metadata_base.raw());
auto bitmap = std::span{bitmap_ptr, (bitmap_bytes + sizeof(std::uint64_t) - 1uz) / sizeof(std::uint64_t)};
allocator.emplace(bitmap, frame_count);