mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-12-24 18:32:49 -06:00
hle: kernel: KMemoryManager: Add CalculateManagementOverheadSize.
This commit is contained in:
parent
43a29b5803
commit
a439867f2c
2 changed files with 26 additions and 0 deletions
|
@ -173,4 +173,16 @@ ResultCode KMemoryManager::Free(KPageLinkedList& page_list, std::size_t num_page
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::size_t KMemoryManager::Impl::CalculateManagementOverheadSize(std::size_t region_size) {
|
||||||
|
const std::size_t ref_count_size = (region_size / PageSize) * sizeof(u16);
|
||||||
|
const std::size_t optimize_map_size =
|
||||||
|
(Common::AlignUp((region_size / PageSize), Common::BitSize<u64>()) /
|
||||||
|
Common::BitSize<u64>()) *
|
||||||
|
sizeof(u64);
|
||||||
|
const std::size_t manager_meta_size =
|
||||||
|
Common::AlignUp(optimize_map_size + ref_count_size, PageSize);
|
||||||
|
const std::size_t page_heap_size = KPageHeap::CalculateManagementOverheadSize(region_size);
|
||||||
|
return manager_meta_size + page_heap_size;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
|
@ -60,6 +60,10 @@ public:
|
||||||
static constexpr std::size_t MaxManagerCount = 10;
|
static constexpr std::size_t MaxManagerCount = 10;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static std::size_t CalculateManagementOverheadSize(std::size_t region_size) {
|
||||||
|
return Impl::CalculateManagementOverheadSize(region_size);
|
||||||
|
}
|
||||||
|
|
||||||
static constexpr u32 EncodeOption(Pool pool, Direction dir) {
|
static constexpr u32 EncodeOption(Pool pool, Direction dir) {
|
||||||
return (static_cast<u32>(pool) << static_cast<u32>(Pool::Shift)) |
|
return (static_cast<u32>(pool) << static_cast<u32>(Pool::Shift)) |
|
||||||
(static_cast<u32>(dir) << static_cast<u32>(Direction::Shift));
|
(static_cast<u32>(dir) << static_cast<u32>(Direction::Shift));
|
||||||
|
@ -89,6 +93,16 @@ private:
|
||||||
KPageHeap heap;
|
KPageHeap heap;
|
||||||
Pool pool{};
|
Pool pool{};
|
||||||
|
|
||||||
|
public:
|
||||||
|
static std::size_t CalculateManagementOverheadSize(std::size_t region_size);
|
||||||
|
|
||||||
|
static constexpr std::size_t CalculateOptimizedProcessOverheadSize(
|
||||||
|
std::size_t region_size) {
|
||||||
|
return (Common::AlignUp((region_size / PageSize), Common::BitSize<u64>()) /
|
||||||
|
Common::BitSize<u64>()) *
|
||||||
|
sizeof(u64);
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Impl() = default;
|
Impl() = default;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue