diff options
Diffstat (limited to 'src')
24 files changed, 131 insertions, 147 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 2976187c0..17f251c37 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -173,7 +173,11 @@ add_library(core STATIC | |||
| 173 | hle/kernel/k_memory_manager.cpp | 173 | hle/kernel/k_memory_manager.cpp |
| 174 | hle/kernel/k_memory_manager.h | 174 | hle/kernel/k_memory_manager.h |
| 175 | hle/kernel/k_page_bitmap.h | 175 | hle/kernel/k_page_bitmap.h |
| 176 | hle/kernel/k_page_heap.cpp | ||
| 177 | hle/kernel/k_page_heap.h | ||
| 176 | hle/kernel/k_page_linked_list.h | 178 | hle/kernel/k_page_linked_list.h |
| 179 | hle/kernel/k_page_table.cpp | ||
| 180 | hle/kernel/k_page_table.h | ||
| 177 | hle/kernel/k_priority_queue.h | 181 | hle/kernel/k_priority_queue.h |
| 178 | hle/kernel/k_readable_event.cpp | 182 | hle/kernel/k_readable_event.cpp |
| 179 | hle/kernel/k_readable_event.h | 183 | hle/kernel/k_readable_event.h |
| @@ -202,10 +206,6 @@ add_library(core STATIC | |||
| 202 | hle/kernel/kernel.cpp | 206 | hle/kernel/kernel.cpp |
| 203 | hle/kernel/kernel.h | 207 | hle/kernel/kernel.h |
| 204 | hle/kernel/memory_types.h | 208 | hle/kernel/memory_types.h |
| 205 | hle/kernel/memory/page_heap.cpp | ||
| 206 | hle/kernel/memory/page_heap.h | ||
| 207 | hle/kernel/memory/page_table.cpp | ||
| 208 | hle/kernel/memory/page_table.h | ||
| 209 | hle/kernel/object.cpp | 209 | hle/kernel/object.cpp |
| 210 | hle/kernel/object.h | 210 | hle/kernel/object.h |
| 211 | hle/kernel/physical_core.cpp | 211 | hle/kernel/physical_core.cpp |
diff --git a/src/core/hle/kernel/k_memory_manager.cpp b/src/core/hle/kernel/k_memory_manager.cpp index 5ea11a918..9027602bf 100644 --- a/src/core/hle/kernel/k_memory_manager.cpp +++ b/src/core/hle/kernel/k_memory_manager.cpp | |||
| @@ -21,7 +21,7 @@ std::size_t KMemoryManager::Impl::Initialize(Pool new_pool, u64 start_address, u | |||
| 21 | const auto ref_count_size{(size / PageSize) * sizeof(u16)}; | 21 | const auto ref_count_size{(size / PageSize) * sizeof(u16)}; |
| 22 | const auto optimize_map_size{(Common::AlignUp((size / PageSize), 64) / 64) * sizeof(u64)}; | 22 | const auto optimize_map_size{(Common::AlignUp((size / PageSize), 64) / 64) * sizeof(u64)}; |
| 23 | const auto manager_size{Common::AlignUp(optimize_map_size + ref_count_size, PageSize)}; | 23 | const auto manager_size{Common::AlignUp(optimize_map_size + ref_count_size, PageSize)}; |
| 24 | const auto page_heap_size{Memory::PageHeap::CalculateManagementOverheadSize(size)}; | 24 | const auto page_heap_size{KPageHeap::CalculateManagementOverheadSize(size)}; |
| 25 | const auto total_metadata_size{manager_size + page_heap_size}; | 25 | const auto total_metadata_size{manager_size + page_heap_size}; |
| 26 | ASSERT(manager_size <= total_metadata_size); | 26 | ASSERT(manager_size <= total_metadata_size); |
| 27 | ASSERT(Common::IsAligned(total_metadata_size, PageSize)); | 27 | ASSERT(Common::IsAligned(total_metadata_size, PageSize)); |
| @@ -59,7 +59,7 @@ VAddr KMemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size | |||
| 59 | std::lock_guard lock{pool_locks[pool_index]}; | 59 | std::lock_guard lock{pool_locks[pool_index]}; |
| 60 | 60 | ||
| 61 | // Choose a heap based on our page size request | 61 | // Choose a heap based on our page size request |
| 62 | const s32 heap_index{Memory::PageHeap::GetAlignedBlockIndex(num_pages, align_pages)}; | 62 | const s32 heap_index{KPageHeap::GetAlignedBlockIndex(num_pages, align_pages)}; |
| 63 | 63 | ||
| 64 | // Loop, trying to iterate from each block | 64 | // Loop, trying to iterate from each block |
| 65 | // TODO (bunnei): Support multiple managers | 65 | // TODO (bunnei): Support multiple managers |
| @@ -72,7 +72,7 @@ VAddr KMemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size | |||
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | // If we allocated more than we need, free some | 74 | // If we allocated more than we need, free some |
| 75 | const auto allocated_pages{Memory::PageHeap::GetBlockNumPages(heap_index)}; | 75 | const auto allocated_pages{KPageHeap::GetBlockNumPages(heap_index)}; |
| 76 | if (allocated_pages > num_pages) { | 76 | if (allocated_pages > num_pages) { |
| 77 | chosen_manager.Free(allocated_block + num_pages * PageSize, allocated_pages - num_pages); | 77 | chosen_manager.Free(allocated_block + num_pages * PageSize, allocated_pages - num_pages); |
| 78 | } | 78 | } |
| @@ -94,7 +94,7 @@ ResultCode KMemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_ | |||
| 94 | std::lock_guard lock{pool_locks[pool_index]}; | 94 | std::lock_guard lock{pool_locks[pool_index]}; |
| 95 | 95 | ||
| 96 | // Choose a heap based on our page size request | 96 | // Choose a heap based on our page size request |
| 97 | const s32 heap_index{Memory::PageHeap::GetBlockIndex(num_pages)}; | 97 | const s32 heap_index{KPageHeap::GetBlockIndex(num_pages)}; |
| 98 | if (heap_index < 0) { | 98 | if (heap_index < 0) { |
| 99 | return ResultOutOfMemory; | 99 | return ResultOutOfMemory; |
| 100 | } | 100 | } |
| @@ -113,7 +113,7 @@ ResultCode KMemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_ | |||
| 113 | 113 | ||
| 114 | // Keep allocating until we've allocated all our pages | 114 | // Keep allocating until we've allocated all our pages |
| 115 | for (s32 index{heap_index}; index >= 0 && num_pages > 0; index--) { | 115 | for (s32 index{heap_index}; index >= 0 && num_pages > 0; index--) { |
| 116 | const auto pages_per_alloc{Memory::PageHeap::GetBlockNumPages(index)}; | 116 | const auto pages_per_alloc{KPageHeap::GetBlockNumPages(index)}; |
| 117 | 117 | ||
| 118 | while (num_pages >= pages_per_alloc) { | 118 | while (num_pages >= pages_per_alloc) { |
| 119 | // Allocate a block | 119 | // Allocate a block |
diff --git a/src/core/hle/kernel/k_memory_manager.h b/src/core/hle/kernel/k_memory_manager.h index 377f642d8..ae9f683b8 100644 --- a/src/core/hle/kernel/k_memory_manager.h +++ b/src/core/hle/kernel/k_memory_manager.h | |||
| @@ -10,14 +10,12 @@ | |||
| 10 | 10 | ||
| 11 | #include "common/common_funcs.h" | 11 | #include "common/common_funcs.h" |
| 12 | #include "common/common_types.h" | 12 | #include "common/common_types.h" |
| 13 | #include "core/hle/kernel/memory/page_heap.h" | 13 | #include "core/hle/kernel/k_page_heap.h" |
| 14 | #include "core/hle/result.h" | 14 | #include "core/hle/result.h" |
| 15 | 15 | ||
| 16 | namespace Kernel { | 16 | namespace Kernel { |
| 17 | class KPageLinkedList; | ||
| 18 | } | ||
| 19 | 17 | ||
| 20 | namespace Kernel { | 18 | class KPageLinkedList; |
| 21 | 19 | ||
| 22 | class KMemoryManager final : NonCopyable { | 20 | class KMemoryManager final : NonCopyable { |
| 23 | public: | 21 | public: |
| @@ -84,7 +82,7 @@ private: | |||
| 84 | using RefCount = u16; | 82 | using RefCount = u16; |
| 85 | 83 | ||
| 86 | private: | 84 | private: |
| 87 | Memory::PageHeap heap; | 85 | KPageHeap heap; |
| 88 | Pool pool{}; | 86 | Pool pool{}; |
| 89 | 87 | ||
| 90 | public: | 88 | public: |
diff --git a/src/core/hle/kernel/memory/page_heap.cpp b/src/core/hle/kernel/k_page_heap.cpp index 8fb53a0e8..07e062922 100644 --- a/src/core/hle/kernel/memory/page_heap.cpp +++ b/src/core/hle/kernel/k_page_heap.cpp | |||
| @@ -2,16 +2,13 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | // This file references various implementation details from Atmosphere, an open-source firmware for | ||
| 6 | // the Nintendo Switch. Copyright 2018-2020 Atmosphere-NX. | ||
| 7 | |||
| 8 | #include "core/core.h" | 5 | #include "core/core.h" |
| 9 | #include "core/hle/kernel/memory/page_heap.h" | 6 | #include "core/hle/kernel/k_page_heap.h" |
| 10 | #include "core/memory.h" | 7 | #include "core/memory.h" |
| 11 | 8 | ||
| 12 | namespace Kernel::Memory { | 9 | namespace Kernel { |
| 13 | 10 | ||
| 14 | void PageHeap::Initialize(VAddr address, std::size_t size, std::size_t metadata_size) { | 11 | void KPageHeap::Initialize(VAddr address, std::size_t size, std::size_t metadata_size) { |
| 15 | // Check our assumptions | 12 | // Check our assumptions |
| 16 | ASSERT(Common::IsAligned((address), PageSize)); | 13 | ASSERT(Common::IsAligned((address), PageSize)); |
| 17 | ASSERT(Common::IsAligned(size, PageSize)); | 14 | ASSERT(Common::IsAligned(size, PageSize)); |
| @@ -32,7 +29,7 @@ void PageHeap::Initialize(VAddr address, std::size_t size, std::size_t metadata_ | |||
| 32 | } | 29 | } |
| 33 | } | 30 | } |
| 34 | 31 | ||
| 35 | VAddr PageHeap::AllocateBlock(s32 index, bool random) { | 32 | VAddr KPageHeap::AllocateBlock(s32 index, bool random) { |
| 36 | const std::size_t needed_size{blocks[index].GetSize()}; | 33 | const std::size_t needed_size{blocks[index].GetSize()}; |
| 37 | 34 | ||
| 38 | for (s32 i{index}; i < static_cast<s32>(MemoryBlockPageShifts.size()); i++) { | 35 | for (s32 i{index}; i < static_cast<s32>(MemoryBlockPageShifts.size()); i++) { |
| @@ -48,13 +45,13 @@ VAddr PageHeap::AllocateBlock(s32 index, bool random) { | |||
| 48 | return 0; | 45 | return 0; |
| 49 | } | 46 | } |
| 50 | 47 | ||
| 51 | void PageHeap::FreeBlock(VAddr block, s32 index) { | 48 | void KPageHeap::FreeBlock(VAddr block, s32 index) { |
| 52 | do { | 49 | do { |
| 53 | block = blocks[index++].PushBlock(block); | 50 | block = blocks[index++].PushBlock(block); |
| 54 | } while (block != 0); | 51 | } while (block != 0); |
| 55 | } | 52 | } |
| 56 | 53 | ||
| 57 | void PageHeap::Free(VAddr addr, std::size_t num_pages) { | 54 | void KPageHeap::Free(VAddr addr, std::size_t num_pages) { |
| 58 | // Freeing no pages is a no-op | 55 | // Freeing no pages is a no-op |
| 59 | if (num_pages == 0) { | 56 | if (num_pages == 0) { |
| 60 | return; | 57 | return; |
| @@ -104,16 +101,16 @@ void PageHeap::Free(VAddr addr, std::size_t num_pages) { | |||
| 104 | } | 101 | } |
| 105 | } | 102 | } |
| 106 | 103 | ||
| 107 | std::size_t PageHeap::CalculateManagementOverheadSize(std::size_t region_size) { | 104 | std::size_t KPageHeap::CalculateManagementOverheadSize(std::size_t region_size) { |
| 108 | std::size_t overhead_size = 0; | 105 | std::size_t overhead_size = 0; |
| 109 | for (std::size_t i = 0; i < MemoryBlockPageShifts.size(); i++) { | 106 | for (std::size_t i = 0; i < MemoryBlockPageShifts.size(); i++) { |
| 110 | const std::size_t cur_block_shift{MemoryBlockPageShifts[i]}; | 107 | const std::size_t cur_block_shift{MemoryBlockPageShifts[i]}; |
| 111 | const std::size_t next_block_shift{ | 108 | const std::size_t next_block_shift{ |
| 112 | (i != MemoryBlockPageShifts.size() - 1) ? MemoryBlockPageShifts[i + 1] : 0}; | 109 | (i != MemoryBlockPageShifts.size() - 1) ? MemoryBlockPageShifts[i + 1] : 0}; |
| 113 | overhead_size += PageHeap::Block::CalculateManagementOverheadSize( | 110 | overhead_size += KPageHeap::Block::CalculateManagementOverheadSize( |
| 114 | region_size, cur_block_shift, next_block_shift); | 111 | region_size, cur_block_shift, next_block_shift); |
| 115 | } | 112 | } |
| 116 | return Common::AlignUp(overhead_size, PageSize); | 113 | return Common::AlignUp(overhead_size, PageSize); |
| 117 | } | 114 | } |
| 118 | 115 | ||
| 119 | } // namespace Kernel::Memory | 116 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/memory/page_heap.h b/src/core/hle/kernel/k_page_heap.h index e21d60a54..de5d6a189 100644 --- a/src/core/hle/kernel/memory/page_heap.h +++ b/src/core/hle/kernel/k_page_heap.h | |||
| @@ -2,9 +2,6 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | // This file references various implementation details from Atmosphere, an open-source firmware for | ||
| 6 | // the Nintendo Switch. Copyright 2018-2020 Atmosphere-NX. | ||
| 7 | |||
| 8 | #pragma once | 5 | #pragma once |
| 9 | 6 | ||
| 10 | #include <array> | 7 | #include <array> |
| @@ -18,9 +15,9 @@ | |||
| 18 | #include "core/hle/kernel/k_page_bitmap.h" | 15 | #include "core/hle/kernel/k_page_bitmap.h" |
| 19 | #include "core/hle/kernel/memory_types.h" | 16 | #include "core/hle/kernel/memory_types.h" |
| 20 | 17 | ||
| 21 | namespace Kernel::Memory { | 18 | namespace Kernel { |
| 22 | 19 | ||
| 23 | class PageHeap final : NonCopyable { | 20 | class KPageHeap final : NonCopyable { |
| 24 | public: | 21 | public: |
| 25 | static constexpr s32 GetAlignedBlockIndex(std::size_t num_pages, std::size_t align_pages) { | 22 | static constexpr s32 GetAlignedBlockIndex(std::size_t num_pages, std::size_t align_pages) { |
| 26 | const auto target_pages{std::max(num_pages, align_pages)}; | 23 | const auto target_pages{std::max(num_pages, align_pages)}; |
| @@ -148,7 +145,7 @@ private: | |||
| 148 | }; | 145 | }; |
| 149 | 146 | ||
| 150 | public: | 147 | public: |
| 151 | PageHeap() = default; | 148 | KPageHeap() = default; |
| 152 | 149 | ||
| 153 | constexpr VAddr GetAddress() const { | 150 | constexpr VAddr GetAddress() const { |
| 154 | return heap_address; | 151 | return heap_address; |
| @@ -193,4 +190,4 @@ private: | |||
| 193 | std::vector<u64> metadata; | 190 | std::vector<u64> metadata; |
| 194 | }; | 191 | }; |
| 195 | 192 | ||
| 196 | } // namespace Kernel::Memory | 193 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/memory/page_table.cpp b/src/core/hle/kernel/k_page_table.cpp index ef9d97413..d09d5ce48 100644 --- a/src/core/hle/kernel/memory/page_table.cpp +++ b/src/core/hle/kernel/k_page_table.cpp | |||
| @@ -10,16 +10,16 @@ | |||
| 10 | #include "core/hle/kernel/k_memory_block.h" | 10 | #include "core/hle/kernel/k_memory_block.h" |
| 11 | #include "core/hle/kernel/k_memory_block_manager.h" | 11 | #include "core/hle/kernel/k_memory_block_manager.h" |
| 12 | #include "core/hle/kernel/k_page_linked_list.h" | 12 | #include "core/hle/kernel/k_page_linked_list.h" |
| 13 | #include "core/hle/kernel/k_page_table.h" | ||
| 13 | #include "core/hle/kernel/k_resource_limit.h" | 14 | #include "core/hle/kernel/k_resource_limit.h" |
| 14 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 15 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 15 | #include "core/hle/kernel/k_system_control.h" | 16 | #include "core/hle/kernel/k_system_control.h" |
| 16 | #include "core/hle/kernel/kernel.h" | 17 | #include "core/hle/kernel/kernel.h" |
| 17 | #include "core/hle/kernel/memory/page_table.h" | ||
| 18 | #include "core/hle/kernel/process.h" | 18 | #include "core/hle/kernel/process.h" |
| 19 | #include "core/hle/kernel/svc_results.h" | 19 | #include "core/hle/kernel/svc_results.h" |
| 20 | #include "core/memory.h" | 20 | #include "core/memory.h" |
| 21 | 21 | ||
| 22 | namespace Kernel::Memory { | 22 | namespace Kernel { |
| 23 | 23 | ||
| 24 | namespace { | 24 | namespace { |
| 25 | 25 | ||
| @@ -58,11 +58,11 @@ constexpr std::size_t GetSizeInRange(const KMemoryInfo& info, VAddr start, VAddr | |||
| 58 | 58 | ||
| 59 | } // namespace | 59 | } // namespace |
| 60 | 60 | ||
| 61 | PageTable::PageTable(Core::System& system) : system{system} {} | 61 | KPageTable::KPageTable(Core::System& system) : system{system} {} |
| 62 | 62 | ||
| 63 | ResultCode PageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, | 63 | ResultCode KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, |
| 64 | bool enable_aslr, VAddr code_addr, std::size_t code_size, | 64 | bool enable_aslr, VAddr code_addr, |
| 65 | KMemoryManager::Pool pool) { | 65 | std::size_t code_size, KMemoryManager::Pool pool) { |
| 66 | 66 | ||
| 67 | const auto GetSpaceStart = [this](KAddressSpaceInfo::Type type) { | 67 | const auto GetSpaceStart = [this](KAddressSpaceInfo::Type type) { |
| 68 | return KAddressSpaceInfo::GetAddressSpaceStart(address_space_width, type); | 68 | return KAddressSpaceInfo::GetAddressSpaceStart(address_space_width, type); |
| @@ -271,8 +271,8 @@ ResultCode PageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_t | |||
| 271 | return InitializeMemoryLayout(start, end); | 271 | return InitializeMemoryLayout(start, end); |
| 272 | } | 272 | } |
| 273 | 273 | ||
| 274 | ResultCode PageTable::MapProcessCode(VAddr addr, std::size_t num_pages, KMemoryState state, | 274 | ResultCode KPageTable::MapProcessCode(VAddr addr, std::size_t num_pages, KMemoryState state, |
| 275 | KMemoryPermission perm) { | 275 | KMemoryPermission perm) { |
| 276 | std::lock_guard lock{page_table_lock}; | 276 | std::lock_guard lock{page_table_lock}; |
| 277 | 277 | ||
| 278 | const u64 size{num_pages * PageSize}; | 278 | const u64 size{num_pages * PageSize}; |
| @@ -295,7 +295,7 @@ ResultCode PageTable::MapProcessCode(VAddr addr, std::size_t num_pages, KMemoryS | |||
| 295 | return RESULT_SUCCESS; | 295 | return RESULT_SUCCESS; |
| 296 | } | 296 | } |
| 297 | 297 | ||
| 298 | ResultCode PageTable::MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) { | 298 | ResultCode KPageTable::MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) { |
| 299 | std::lock_guard lock{page_table_lock}; | 299 | std::lock_guard lock{page_table_lock}; |
| 300 | 300 | ||
| 301 | const std::size_t num_pages{size / PageSize}; | 301 | const std::size_t num_pages{size / PageSize}; |
| @@ -332,7 +332,7 @@ ResultCode PageTable::MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std:: | |||
| 332 | return RESULT_SUCCESS; | 332 | return RESULT_SUCCESS; |
| 333 | } | 333 | } |
| 334 | 334 | ||
| 335 | ResultCode PageTable::UnmapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) { | 335 | ResultCode KPageTable::UnmapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) { |
| 336 | std::lock_guard lock{page_table_lock}; | 336 | std::lock_guard lock{page_table_lock}; |
| 337 | 337 | ||
| 338 | if (!size) { | 338 | if (!size) { |
| @@ -363,7 +363,7 @@ ResultCode PageTable::UnmapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std | |||
| 363 | return RESULT_SUCCESS; | 363 | return RESULT_SUCCESS; |
| 364 | } | 364 | } |
| 365 | 365 | ||
| 366 | void PageTable::MapPhysicalMemory(KPageLinkedList& page_linked_list, VAddr start, VAddr end) { | 366 | void KPageTable::MapPhysicalMemory(KPageLinkedList& page_linked_list, VAddr start, VAddr end) { |
| 367 | auto node{page_linked_list.Nodes().begin()}; | 367 | auto node{page_linked_list.Nodes().begin()}; |
| 368 | PAddr map_addr{node->GetAddress()}; | 368 | PAddr map_addr{node->GetAddress()}; |
| 369 | std::size_t src_num_pages{node->GetNumPages()}; | 369 | std::size_t src_num_pages{node->GetNumPages()}; |
| @@ -395,7 +395,7 @@ void PageTable::MapPhysicalMemory(KPageLinkedList& page_linked_list, VAddr start | |||
| 395 | }); | 395 | }); |
| 396 | } | 396 | } |
| 397 | 397 | ||
| 398 | ResultCode PageTable::MapPhysicalMemory(VAddr addr, std::size_t size) { | 398 | ResultCode KPageTable::MapPhysicalMemory(VAddr addr, std::size_t size) { |
| 399 | std::lock_guard lock{page_table_lock}; | 399 | std::lock_guard lock{page_table_lock}; |
| 400 | 400 | ||
| 401 | std::size_t mapped_size{}; | 401 | std::size_t mapped_size{}; |
| @@ -443,7 +443,7 @@ ResultCode PageTable::MapPhysicalMemory(VAddr addr, std::size_t size) { | |||
| 443 | return RESULT_SUCCESS; | 443 | return RESULT_SUCCESS; |
| 444 | } | 444 | } |
| 445 | 445 | ||
| 446 | ResultCode PageTable::UnmapPhysicalMemory(VAddr addr, std::size_t size) { | 446 | ResultCode KPageTable::UnmapPhysicalMemory(VAddr addr, std::size_t size) { |
| 447 | std::lock_guard lock{page_table_lock}; | 447 | std::lock_guard lock{page_table_lock}; |
| 448 | 448 | ||
| 449 | const VAddr end_addr{addr + size}; | 449 | const VAddr end_addr{addr + size}; |
| @@ -480,7 +480,7 @@ ResultCode PageTable::UnmapPhysicalMemory(VAddr addr, std::size_t size) { | |||
| 480 | return RESULT_SUCCESS; | 480 | return RESULT_SUCCESS; |
| 481 | } | 481 | } |
| 482 | 482 | ||
| 483 | ResultCode PageTable::UnmapMemory(VAddr addr, std::size_t size) { | 483 | ResultCode KPageTable::UnmapMemory(VAddr addr, std::size_t size) { |
| 484 | std::lock_guard lock{page_table_lock}; | 484 | std::lock_guard lock{page_table_lock}; |
| 485 | 485 | ||
| 486 | const VAddr end_addr{addr + size}; | 486 | const VAddr end_addr{addr + size}; |
| @@ -516,7 +516,7 @@ ResultCode PageTable::UnmapMemory(VAddr addr, std::size_t size) { | |||
| 516 | return RESULT_SUCCESS; | 516 | return RESULT_SUCCESS; |
| 517 | } | 517 | } |
| 518 | 518 | ||
| 519 | ResultCode PageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) { | 519 | ResultCode KPageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) { |
| 520 | std::lock_guard lock{page_table_lock}; | 520 | std::lock_guard lock{page_table_lock}; |
| 521 | 521 | ||
| 522 | KMemoryState src_state{}; | 522 | KMemoryState src_state{}; |
| @@ -555,7 +555,7 @@ ResultCode PageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) { | |||
| 555 | return RESULT_SUCCESS; | 555 | return RESULT_SUCCESS; |
| 556 | } | 556 | } |
| 557 | 557 | ||
| 558 | ResultCode PageTable::Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size) { | 558 | ResultCode KPageTable::Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size) { |
| 559 | std::lock_guard lock{page_table_lock}; | 559 | std::lock_guard lock{page_table_lock}; |
| 560 | 560 | ||
| 561 | KMemoryState src_state{}; | 561 | KMemoryState src_state{}; |
| @@ -597,8 +597,8 @@ ResultCode PageTable::Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size) { | |||
| 597 | return RESULT_SUCCESS; | 597 | return RESULT_SUCCESS; |
| 598 | } | 598 | } |
| 599 | 599 | ||
| 600 | ResultCode PageTable::MapPages(VAddr addr, const KPageLinkedList& page_linked_list, | 600 | ResultCode KPageTable::MapPages(VAddr addr, const KPageLinkedList& page_linked_list, |
| 601 | KMemoryPermission perm) { | 601 | KMemoryPermission perm) { |
| 602 | VAddr cur_addr{addr}; | 602 | VAddr cur_addr{addr}; |
| 603 | 603 | ||
| 604 | for (const auto& node : page_linked_list.Nodes()) { | 604 | for (const auto& node : page_linked_list.Nodes()) { |
| @@ -619,8 +619,8 @@ ResultCode PageTable::MapPages(VAddr addr, const KPageLinkedList& page_linked_li | |||
| 619 | return RESULT_SUCCESS; | 619 | return RESULT_SUCCESS; |
| 620 | } | 620 | } |
| 621 | 621 | ||
| 622 | ResultCode PageTable::MapPages(VAddr addr, KPageLinkedList& page_linked_list, KMemoryState state, | 622 | ResultCode KPageTable::MapPages(VAddr addr, KPageLinkedList& page_linked_list, KMemoryState state, |
| 623 | KMemoryPermission perm) { | 623 | KMemoryPermission perm) { |
| 624 | std::lock_guard lock{page_table_lock}; | 624 | std::lock_guard lock{page_table_lock}; |
| 625 | 625 | ||
| 626 | const std::size_t num_pages{page_linked_list.GetNumPages()}; | 626 | const std::size_t num_pages{page_linked_list.GetNumPages()}; |
| @@ -641,8 +641,8 @@ ResultCode PageTable::MapPages(VAddr addr, KPageLinkedList& page_linked_list, KM | |||
| 641 | return RESULT_SUCCESS; | 641 | return RESULT_SUCCESS; |
| 642 | } | 642 | } |
| 643 | 643 | ||
| 644 | ResultCode PageTable::SetCodeMemoryPermission(VAddr addr, std::size_t size, | 644 | ResultCode KPageTable::SetCodeMemoryPermission(VAddr addr, std::size_t size, |
| 645 | KMemoryPermission perm) { | 645 | KMemoryPermission perm) { |
| 646 | 646 | ||
| 647 | std::lock_guard lock{page_table_lock}; | 647 | std::lock_guard lock{page_table_lock}; |
| 648 | 648 | ||
| @@ -689,13 +689,13 @@ ResultCode PageTable::SetCodeMemoryPermission(VAddr addr, std::size_t size, | |||
| 689 | return RESULT_SUCCESS; | 689 | return RESULT_SUCCESS; |
| 690 | } | 690 | } |
| 691 | 691 | ||
| 692 | KMemoryInfo PageTable::QueryInfoImpl(VAddr addr) { | 692 | KMemoryInfo KPageTable::QueryInfoImpl(VAddr addr) { |
| 693 | std::lock_guard lock{page_table_lock}; | 693 | std::lock_guard lock{page_table_lock}; |
| 694 | 694 | ||
| 695 | return block_manager->FindBlock(addr).GetMemoryInfo(); | 695 | return block_manager->FindBlock(addr).GetMemoryInfo(); |
| 696 | } | 696 | } |
| 697 | 697 | ||
| 698 | KMemoryInfo PageTable::QueryInfo(VAddr addr) { | 698 | KMemoryInfo KPageTable::QueryInfo(VAddr addr) { |
| 699 | if (!Contains(addr, 1)) { | 699 | if (!Contains(addr, 1)) { |
| 700 | return {address_space_end, 0 - address_space_end, KMemoryState::Inaccessible, | 700 | return {address_space_end, 0 - address_space_end, KMemoryState::Inaccessible, |
| 701 | KMemoryPermission::None, KMemoryAttribute::None, KMemoryPermission::None}; | 701 | KMemoryPermission::None, KMemoryAttribute::None, KMemoryPermission::None}; |
| @@ -704,7 +704,7 @@ KMemoryInfo PageTable::QueryInfo(VAddr addr) { | |||
| 704 | return QueryInfoImpl(addr); | 704 | return QueryInfoImpl(addr); |
| 705 | } | 705 | } |
| 706 | 706 | ||
| 707 | ResultCode PageTable::ReserveTransferMemory(VAddr addr, std::size_t size, KMemoryPermission perm) { | 707 | ResultCode KPageTable::ReserveTransferMemory(VAddr addr, std::size_t size, KMemoryPermission perm) { |
| 708 | std::lock_guard lock{page_table_lock}; | 708 | std::lock_guard lock{page_table_lock}; |
| 709 | 709 | ||
| 710 | KMemoryState state{}; | 710 | KMemoryState state{}; |
| @@ -722,7 +722,7 @@ ResultCode PageTable::ReserveTransferMemory(VAddr addr, std::size_t size, KMemor | |||
| 722 | return RESULT_SUCCESS; | 722 | return RESULT_SUCCESS; |
| 723 | } | 723 | } |
| 724 | 724 | ||
| 725 | ResultCode PageTable::ResetTransferMemory(VAddr addr, std::size_t size) { | 725 | ResultCode KPageTable::ResetTransferMemory(VAddr addr, std::size_t size) { |
| 726 | std::lock_guard lock{page_table_lock}; | 726 | std::lock_guard lock{page_table_lock}; |
| 727 | 727 | ||
| 728 | KMemoryState state{}; | 728 | KMemoryState state{}; |
| @@ -739,8 +739,8 @@ ResultCode PageTable::ResetTransferMemory(VAddr addr, std::size_t size) { | |||
| 739 | return RESULT_SUCCESS; | 739 | return RESULT_SUCCESS; |
| 740 | } | 740 | } |
| 741 | 741 | ||
| 742 | ResultCode PageTable::SetMemoryAttribute(VAddr addr, std::size_t size, KMemoryAttribute mask, | 742 | ResultCode KPageTable::SetMemoryAttribute(VAddr addr, std::size_t size, KMemoryAttribute mask, |
| 743 | KMemoryAttribute value) { | 743 | KMemoryAttribute value) { |
| 744 | std::lock_guard lock{page_table_lock}; | 744 | std::lock_guard lock{page_table_lock}; |
| 745 | 745 | ||
| 746 | KMemoryState state{}; | 746 | KMemoryState state{}; |
| @@ -761,13 +761,13 @@ ResultCode PageTable::SetMemoryAttribute(VAddr addr, std::size_t size, KMemoryAt | |||
| 761 | return RESULT_SUCCESS; | 761 | return RESULT_SUCCESS; |
| 762 | } | 762 | } |
| 763 | 763 | ||
| 764 | ResultCode PageTable::SetHeapCapacity(std::size_t new_heap_capacity) { | 764 | ResultCode KPageTable::SetHeapCapacity(std::size_t new_heap_capacity) { |
| 765 | std::lock_guard lock{page_table_lock}; | 765 | std::lock_guard lock{page_table_lock}; |
| 766 | heap_capacity = new_heap_capacity; | 766 | heap_capacity = new_heap_capacity; |
| 767 | return RESULT_SUCCESS; | 767 | return RESULT_SUCCESS; |
| 768 | } | 768 | } |
| 769 | 769 | ||
| 770 | ResultVal<VAddr> PageTable::SetHeapSize(std::size_t size) { | 770 | ResultVal<VAddr> KPageTable::SetHeapSize(std::size_t size) { |
| 771 | 771 | ||
| 772 | if (size > heap_region_end - heap_region_start) { | 772 | if (size > heap_region_end - heap_region_start) { |
| 773 | return ResultOutOfMemory; | 773 | return ResultOutOfMemory; |
| @@ -818,10 +818,10 @@ ResultVal<VAddr> PageTable::SetHeapSize(std::size_t size) { | |||
| 818 | return MakeResult<VAddr>(heap_region_start); | 818 | return MakeResult<VAddr>(heap_region_start); |
| 819 | } | 819 | } |
| 820 | 820 | ||
| 821 | ResultVal<VAddr> PageTable::AllocateAndMapMemory(std::size_t needed_num_pages, std::size_t align, | 821 | ResultVal<VAddr> KPageTable::AllocateAndMapMemory(std::size_t needed_num_pages, std::size_t align, |
| 822 | bool is_map_only, VAddr region_start, | 822 | bool is_map_only, VAddr region_start, |
| 823 | std::size_t region_num_pages, KMemoryState state, | 823 | std::size_t region_num_pages, KMemoryState state, |
| 824 | KMemoryPermission perm, PAddr map_addr) { | 824 | KMemoryPermission perm, PAddr map_addr) { |
| 825 | std::lock_guard lock{page_table_lock}; | 825 | std::lock_guard lock{page_table_lock}; |
| 826 | 826 | ||
| 827 | if (!CanContain(region_start, region_num_pages * PageSize, state)) { | 827 | if (!CanContain(region_start, region_num_pages * PageSize, state)) { |
| @@ -852,7 +852,7 @@ ResultVal<VAddr> PageTable::AllocateAndMapMemory(std::size_t needed_num_pages, s | |||
| 852 | return MakeResult<VAddr>(addr); | 852 | return MakeResult<VAddr>(addr); |
| 853 | } | 853 | } |
| 854 | 854 | ||
| 855 | ResultCode PageTable::LockForDeviceAddressSpace(VAddr addr, std::size_t size) { | 855 | ResultCode KPageTable::LockForDeviceAddressSpace(VAddr addr, std::size_t size) { |
| 856 | std::lock_guard lock{page_table_lock}; | 856 | std::lock_guard lock{page_table_lock}; |
| 857 | 857 | ||
| 858 | KMemoryPermission perm{}; | 858 | KMemoryPermission perm{}; |
| @@ -875,7 +875,7 @@ ResultCode PageTable::LockForDeviceAddressSpace(VAddr addr, std::size_t size) { | |||
| 875 | return RESULT_SUCCESS; | 875 | return RESULT_SUCCESS; |
| 876 | } | 876 | } |
| 877 | 877 | ||
| 878 | ResultCode PageTable::UnlockForDeviceAddressSpace(VAddr addr, std::size_t size) { | 878 | ResultCode KPageTable::UnlockForDeviceAddressSpace(VAddr addr, std::size_t size) { |
| 879 | std::lock_guard lock{page_table_lock}; | 879 | std::lock_guard lock{page_table_lock}; |
| 880 | 880 | ||
| 881 | KMemoryPermission perm{}; | 881 | KMemoryPermission perm{}; |
| @@ -898,13 +898,13 @@ ResultCode PageTable::UnlockForDeviceAddressSpace(VAddr addr, std::size_t size) | |||
| 898 | return RESULT_SUCCESS; | 898 | return RESULT_SUCCESS; |
| 899 | } | 899 | } |
| 900 | 900 | ||
| 901 | ResultCode PageTable::InitializeMemoryLayout(VAddr start, VAddr end) { | 901 | ResultCode KPageTable::InitializeMemoryLayout(VAddr start, VAddr end) { |
| 902 | block_manager = std::make_unique<KMemoryBlockManager>(start, end); | 902 | block_manager = std::make_unique<KMemoryBlockManager>(start, end); |
| 903 | 903 | ||
| 904 | return RESULT_SUCCESS; | 904 | return RESULT_SUCCESS; |
| 905 | } | 905 | } |
| 906 | 906 | ||
| 907 | bool PageTable::IsRegionMapped(VAddr address, u64 size) { | 907 | bool KPageTable::IsRegionMapped(VAddr address, u64 size) { |
| 908 | return CheckMemoryState(address, size, KMemoryState::All, KMemoryState::Free, | 908 | return CheckMemoryState(address, size, KMemoryState::All, KMemoryState::Free, |
| 909 | KMemoryPermission::Mask, KMemoryPermission::None, | 909 | KMemoryPermission::Mask, KMemoryPermission::None, |
| 910 | KMemoryAttribute::Mask, KMemoryAttribute::None, | 910 | KMemoryAttribute::Mask, KMemoryAttribute::None, |
| @@ -912,7 +912,7 @@ bool PageTable::IsRegionMapped(VAddr address, u64 size) { | |||
| 912 | .IsError(); | 912 | .IsError(); |
| 913 | } | 913 | } |
| 914 | 914 | ||
| 915 | bool PageTable::IsRegionContiguous(VAddr addr, u64 size) const { | 915 | bool KPageTable::IsRegionContiguous(VAddr addr, u64 size) const { |
| 916 | auto start_ptr = system.Memory().GetPointer(addr); | 916 | auto start_ptr = system.Memory().GetPointer(addr); |
| 917 | for (u64 offset{}; offset < size; offset += PageSize) { | 917 | for (u64 offset{}; offset < size; offset += PageSize) { |
| 918 | if (start_ptr != system.Memory().GetPointer(addr + offset)) { | 918 | if (start_ptr != system.Memory().GetPointer(addr + offset)) { |
| @@ -923,8 +923,8 @@ bool PageTable::IsRegionContiguous(VAddr addr, u64 size) const { | |||
| 923 | return true; | 923 | return true; |
| 924 | } | 924 | } |
| 925 | 925 | ||
| 926 | void PageTable::AddRegionToPages(VAddr start, std::size_t num_pages, | 926 | void KPageTable::AddRegionToPages(VAddr start, std::size_t num_pages, |
| 927 | KPageLinkedList& page_linked_list) { | 927 | KPageLinkedList& page_linked_list) { |
| 928 | VAddr addr{start}; | 928 | VAddr addr{start}; |
| 929 | while (addr < start + (num_pages * PageSize)) { | 929 | while (addr < start + (num_pages * PageSize)) { |
| 930 | const PAddr paddr{GetPhysicalAddr(addr)}; | 930 | const PAddr paddr{GetPhysicalAddr(addr)}; |
| @@ -936,8 +936,8 @@ void PageTable::AddRegionToPages(VAddr start, std::size_t num_pages, | |||
| 936 | } | 936 | } |
| 937 | } | 937 | } |
| 938 | 938 | ||
| 939 | VAddr PageTable::AllocateVirtualMemory(VAddr start, std::size_t region_num_pages, | 939 | VAddr KPageTable::AllocateVirtualMemory(VAddr start, std::size_t region_num_pages, |
| 940 | u64 needed_num_pages, std::size_t align) { | 940 | u64 needed_num_pages, std::size_t align) { |
| 941 | if (is_aslr_enabled) { | 941 | if (is_aslr_enabled) { |
| 942 | UNIMPLEMENTED(); | 942 | UNIMPLEMENTED(); |
| 943 | } | 943 | } |
| @@ -945,8 +945,8 @@ VAddr PageTable::AllocateVirtualMemory(VAddr start, std::size_t region_num_pages | |||
| 945 | IsKernel() ? 1 : 4); | 945 | IsKernel() ? 1 : 4); |
| 946 | } | 946 | } |
| 947 | 947 | ||
| 948 | ResultCode PageTable::Operate(VAddr addr, std::size_t num_pages, const KPageLinkedList& page_group, | 948 | ResultCode KPageTable::Operate(VAddr addr, std::size_t num_pages, const KPageLinkedList& page_group, |
| 949 | OperationType operation) { | 949 | OperationType operation) { |
| 950 | std::lock_guard lock{page_table_lock}; | 950 | std::lock_guard lock{page_table_lock}; |
| 951 | 951 | ||
| 952 | ASSERT(Common::IsAligned(addr, PageSize)); | 952 | ASSERT(Common::IsAligned(addr, PageSize)); |
| @@ -970,8 +970,8 @@ ResultCode PageTable::Operate(VAddr addr, std::size_t num_pages, const KPageLink | |||
| 970 | return RESULT_SUCCESS; | 970 | return RESULT_SUCCESS; |
| 971 | } | 971 | } |
| 972 | 972 | ||
| 973 | ResultCode PageTable::Operate(VAddr addr, std::size_t num_pages, KMemoryPermission perm, | 973 | ResultCode KPageTable::Operate(VAddr addr, std::size_t num_pages, KMemoryPermission perm, |
| 974 | OperationType operation, PAddr map_addr) { | 974 | OperationType operation, PAddr map_addr) { |
| 975 | std::lock_guard lock{page_table_lock}; | 975 | std::lock_guard lock{page_table_lock}; |
| 976 | 976 | ||
| 977 | ASSERT(num_pages > 0); | 977 | ASSERT(num_pages > 0); |
| @@ -997,7 +997,7 @@ ResultCode PageTable::Operate(VAddr addr, std::size_t num_pages, KMemoryPermissi | |||
| 997 | return RESULT_SUCCESS; | 997 | return RESULT_SUCCESS; |
| 998 | } | 998 | } |
| 999 | 999 | ||
| 1000 | constexpr VAddr PageTable::GetRegionAddress(KMemoryState state) const { | 1000 | constexpr VAddr KPageTable::GetRegionAddress(KMemoryState state) const { |
| 1001 | switch (state) { | 1001 | switch (state) { |
| 1002 | case KMemoryState::Free: | 1002 | case KMemoryState::Free: |
| 1003 | case KMemoryState::Kernel: | 1003 | case KMemoryState::Kernel: |
| @@ -1032,7 +1032,7 @@ constexpr VAddr PageTable::GetRegionAddress(KMemoryState state) const { | |||
| 1032 | } | 1032 | } |
| 1033 | } | 1033 | } |
| 1034 | 1034 | ||
| 1035 | constexpr std::size_t PageTable::GetRegionSize(KMemoryState state) const { | 1035 | constexpr std::size_t KPageTable::GetRegionSize(KMemoryState state) const { |
| 1036 | switch (state) { | 1036 | switch (state) { |
| 1037 | case KMemoryState::Free: | 1037 | case KMemoryState::Free: |
| 1038 | case KMemoryState::Kernel: | 1038 | case KMemoryState::Kernel: |
| @@ -1067,7 +1067,7 @@ constexpr std::size_t PageTable::GetRegionSize(KMemoryState state) const { | |||
| 1067 | } | 1067 | } |
| 1068 | } | 1068 | } |
| 1069 | 1069 | ||
| 1070 | constexpr bool PageTable::CanContain(VAddr addr, std::size_t size, KMemoryState state) const { | 1070 | constexpr bool KPageTable::CanContain(VAddr addr, std::size_t size, KMemoryState state) const { |
| 1071 | const VAddr end{addr + size}; | 1071 | const VAddr end{addr + size}; |
| 1072 | const VAddr last{end - 1}; | 1072 | const VAddr last{end - 1}; |
| 1073 | const VAddr region_start{GetRegionAddress(state)}; | 1073 | const VAddr region_start{GetRegionAddress(state)}; |
| @@ -1109,10 +1109,11 @@ constexpr bool PageTable::CanContain(VAddr addr, std::size_t size, KMemoryState | |||
| 1109 | } | 1109 | } |
| 1110 | } | 1110 | } |
| 1111 | 1111 | ||
| 1112 | constexpr ResultCode PageTable::CheckMemoryState(const KMemoryInfo& info, KMemoryState state_mask, | 1112 | constexpr ResultCode KPageTable::CheckMemoryState(const KMemoryInfo& info, KMemoryState state_mask, |
| 1113 | KMemoryState state, KMemoryPermission perm_mask, | 1113 | KMemoryState state, KMemoryPermission perm_mask, |
| 1114 | KMemoryPermission perm, KMemoryAttribute attr_mask, | 1114 | KMemoryPermission perm, |
| 1115 | KMemoryAttribute attr) const { | 1115 | KMemoryAttribute attr_mask, |
| 1116 | KMemoryAttribute attr) const { | ||
| 1116 | // Validate the states match expectation | 1117 | // Validate the states match expectation |
| 1117 | if ((info.state & state_mask) != state) { | 1118 | if ((info.state & state_mask) != state) { |
| 1118 | return ResultInvalidCurrentMemory; | 1119 | return ResultInvalidCurrentMemory; |
| @@ -1127,12 +1128,12 @@ constexpr ResultCode PageTable::CheckMemoryState(const KMemoryInfo& info, KMemor | |||
| 1127 | return RESULT_SUCCESS; | 1128 | return RESULT_SUCCESS; |
| 1128 | } | 1129 | } |
| 1129 | 1130 | ||
| 1130 | ResultCode PageTable::CheckMemoryState(KMemoryState* out_state, KMemoryPermission* out_perm, | 1131 | ResultCode KPageTable::CheckMemoryState(KMemoryState* out_state, KMemoryPermission* out_perm, |
| 1131 | KMemoryAttribute* out_attr, VAddr addr, std::size_t size, | 1132 | KMemoryAttribute* out_attr, VAddr addr, std::size_t size, |
| 1132 | KMemoryState state_mask, KMemoryState state, | 1133 | KMemoryState state_mask, KMemoryState state, |
| 1133 | KMemoryPermission perm_mask, KMemoryPermission perm, | 1134 | KMemoryPermission perm_mask, KMemoryPermission perm, |
| 1134 | KMemoryAttribute attr_mask, KMemoryAttribute attr, | 1135 | KMemoryAttribute attr_mask, KMemoryAttribute attr, |
| 1135 | KMemoryAttribute ignore_attr) { | 1136 | KMemoryAttribute ignore_attr) { |
| 1136 | std::lock_guard lock{page_table_lock}; | 1137 | std::lock_guard lock{page_table_lock}; |
| 1137 | 1138 | ||
| 1138 | // Get information about the first block | 1139 | // Get information about the first block |
| @@ -1186,4 +1187,4 @@ ResultCode PageTable::CheckMemoryState(KMemoryState* out_state, KMemoryPermissio | |||
| 1186 | return RESULT_SUCCESS; | 1187 | return RESULT_SUCCESS; |
| 1187 | } | 1188 | } |
| 1188 | 1189 | ||
| 1189 | } // namespace Kernel::Memory | 1190 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/memory/page_table.h b/src/core/hle/kernel/k_page_table.h index a9e850e01..49b824379 100644 --- a/src/core/hle/kernel/memory/page_table.h +++ b/src/core/hle/kernel/k_page_table.h | |||
| @@ -19,14 +19,12 @@ class System; | |||
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | namespace Kernel { | 21 | namespace Kernel { |
| 22 | class KMemoryBlockManager; | ||
| 23 | } | ||
| 24 | 22 | ||
| 25 | namespace Kernel::Memory { | 23 | class KMemoryBlockManager; |
| 26 | 24 | ||
| 27 | class PageTable final : NonCopyable { | 25 | class KPageTable final : NonCopyable { |
| 28 | public: | 26 | public: |
| 29 | explicit PageTable(Core::System& system); | 27 | explicit KPageTable(Core::System& system); |
| 30 | 28 | ||
| 31 | ResultCode InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, bool enable_aslr, | 29 | ResultCode InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, bool enable_aslr, |
| 32 | VAddr code_addr, std::size_t code_size, | 30 | VAddr code_addr, std::size_t code_size, |
| @@ -278,4 +276,4 @@ private: | |||
| 278 | Core::System& system; | 276 | Core::System& system; |
| 279 | }; | 277 | }; |
| 280 | 278 | ||
| 281 | } // namespace Kernel::Memory | 279 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_shared_memory.cpp b/src/core/hle/kernel/k_shared_memory.cpp index aade52764..9b14f42b5 100644 --- a/src/core/hle/kernel/k_shared_memory.cpp +++ b/src/core/hle/kernel/k_shared_memory.cpp | |||
| @@ -4,10 +4,10 @@ | |||
| 4 | 4 | ||
| 5 | #include "common/assert.h" | 5 | #include "common/assert.h" |
| 6 | #include "core/core.h" | 6 | #include "core/core.h" |
| 7 | #include "core/hle/kernel/k_page_table.h" | ||
| 7 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 8 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 8 | #include "core/hle/kernel/k_shared_memory.h" | 9 | #include "core/hle/kernel/k_shared_memory.h" |
| 9 | #include "core/hle/kernel/kernel.h" | 10 | #include "core/hle/kernel/kernel.h" |
| 10 | #include "core/hle/kernel/memory/page_table.h" | ||
| 11 | 11 | ||
| 12 | namespace Kernel { | 12 | namespace Kernel { |
| 13 | 13 | ||
| @@ -21,8 +21,7 @@ KSharedMemory::~KSharedMemory() { | |||
| 21 | std::shared_ptr<KSharedMemory> KSharedMemory::Create( | 21 | std::shared_ptr<KSharedMemory> KSharedMemory::Create( |
| 22 | KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process, | 22 | KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process, |
| 23 | KPageLinkedList&& page_list, KMemoryPermission owner_permission, | 23 | KPageLinkedList&& page_list, KMemoryPermission owner_permission, |
| 24 | KMemoryPermission user_permission, PAddr physical_address, std::size_t size, | 24 | KMemoryPermission user_permission, PAddr physical_address, std::size_t size, std::string name) { |
| 25 | std::string name) { | ||
| 26 | 25 | ||
| 27 | const auto resource_limit = kernel.GetSystemResourceLimit(); | 26 | const auto resource_limit = kernel.GetSystemResourceLimit(); |
| 28 | KScopedResourceReservation memory_reservation(resource_limit, LimitableResource::PhysicalMemory, | 27 | KScopedResourceReservation memory_reservation(resource_limit, LimitableResource::PhysicalMemory, |
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index e0359eb3c..73b85d6f9 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -15,13 +15,13 @@ | |||
| 15 | #include "core/file_sys/program_metadata.h" | 15 | #include "core/file_sys/program_metadata.h" |
| 16 | #include "core/hle/kernel/code_set.h" | 16 | #include "core/hle/kernel/code_set.h" |
| 17 | #include "core/hle/kernel/k_memory_block_manager.h" | 17 | #include "core/hle/kernel/k_memory_block_manager.h" |
| 18 | #include "core/hle/kernel/k_page_table.h" | ||
| 18 | #include "core/hle/kernel/k_resource_limit.h" | 19 | #include "core/hle/kernel/k_resource_limit.h" |
| 19 | #include "core/hle/kernel/k_scheduler.h" | 20 | #include "core/hle/kernel/k_scheduler.h" |
| 20 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 21 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 21 | #include "core/hle/kernel/k_slab_heap.h" | 22 | #include "core/hle/kernel/k_slab_heap.h" |
| 22 | #include "core/hle/kernel/k_thread.h" | 23 | #include "core/hle/kernel/k_thread.h" |
| 23 | #include "core/hle/kernel/kernel.h" | 24 | #include "core/hle/kernel/kernel.h" |
| 24 | #include "core/hle/kernel/memory/page_table.h" | ||
| 25 | #include "core/hle/kernel/process.h" | 25 | #include "core/hle/kernel/process.h" |
| 26 | #include "core/hle/kernel/svc_results.h" | 26 | #include "core/hle/kernel/svc_results.h" |
| 27 | #include "core/hle/lock.h" | 27 | #include "core/hle/lock.h" |
| @@ -464,9 +464,9 @@ bool Process::IsSignaled() const { | |||
| 464 | } | 464 | } |
| 465 | 465 | ||
| 466 | Process::Process(Core::System& system) | 466 | Process::Process(Core::System& system) |
| 467 | : KSynchronizationObject{system.Kernel()}, | 467 | : KSynchronizationObject{system.Kernel()}, page_table{std::make_unique<KPageTable>(system)}, |
| 468 | page_table{std::make_unique<Memory::PageTable>(system)}, handle_table{system.Kernel()}, | 468 | handle_table{system.Kernel()}, address_arbiter{system}, condition_var{system}, |
| 469 | address_arbiter{system}, condition_var{system}, state_lock{system.Kernel()}, system{system} {} | 469 | state_lock{system.Kernel()}, system{system} {} |
| 470 | 470 | ||
| 471 | Process::~Process() = default; | 471 | Process::~Process() = default; |
| 472 | 472 | ||
diff --git a/src/core/hle/kernel/process.h b/src/core/hle/kernel/process.h index 320b0f347..45eefb90e 100644 --- a/src/core/hle/kernel/process.h +++ b/src/core/hle/kernel/process.h | |||
| @@ -29,16 +29,13 @@ class ProgramMetadata; | |||
| 29 | namespace Kernel { | 29 | namespace Kernel { |
| 30 | 30 | ||
| 31 | class KernelCore; | 31 | class KernelCore; |
| 32 | class KPageTable; | ||
| 32 | class KResourceLimit; | 33 | class KResourceLimit; |
| 33 | class KThread; | 34 | class KThread; |
| 34 | class TLSPage; | 35 | class TLSPage; |
| 35 | 36 | ||
| 36 | struct CodeSet; | 37 | struct CodeSet; |
| 37 | 38 | ||
| 38 | namespace Memory { | ||
| 39 | class PageTable; | ||
| 40 | } | ||
| 41 | |||
| 42 | enum class MemoryRegion : u16 { | 39 | enum class MemoryRegion : u16 { |
| 43 | APPLICATION = 1, | 40 | APPLICATION = 1, |
| 44 | SYSTEM = 2, | 41 | SYSTEM = 2, |
| @@ -104,12 +101,12 @@ public: | |||
| 104 | } | 101 | } |
| 105 | 102 | ||
| 106 | /// Gets a reference to the process' page table. | 103 | /// Gets a reference to the process' page table. |
| 107 | Memory::PageTable& PageTable() { | 104 | KPageTable& PageTable() { |
| 108 | return *page_table; | 105 | return *page_table; |
| 109 | } | 106 | } |
| 110 | 107 | ||
| 111 | /// Gets const a reference to the process' page table. | 108 | /// Gets const a reference to the process' page table. |
| 112 | const Memory::PageTable& PageTable() const { | 109 | const KPageTable& PageTable() const { |
| 113 | return *page_table; | 110 | return *page_table; |
| 114 | } | 111 | } |
| 115 | 112 | ||
| @@ -385,7 +382,7 @@ private: | |||
| 385 | ResultCode AllocateMainThreadStack(std::size_t stack_size); | 382 | ResultCode AllocateMainThreadStack(std::size_t stack_size); |
| 386 | 383 | ||
| 387 | /// Memory manager for this process | 384 | /// Memory manager for this process |
| 388 | std::unique_ptr<Memory::PageTable> page_table; | 385 | std::unique_ptr<KPageTable> page_table; |
| 389 | 386 | ||
| 390 | /// Current status of the process | 387 | /// Current status of the process |
| 391 | ProcessStatus status{}; | 388 | ProcessStatus status{}; |
diff --git a/src/core/hle/kernel/process_capability.cpp b/src/core/hle/kernel/process_capability.cpp index 7c567049e..3fc326eab 100644 --- a/src/core/hle/kernel/process_capability.cpp +++ b/src/core/hle/kernel/process_capability.cpp | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | #include "common/bit_util.h" | 7 | #include "common/bit_util.h" |
| 8 | #include "common/logging/log.h" | 8 | #include "common/logging/log.h" |
| 9 | #include "core/hle/kernel/handle_table.h" | 9 | #include "core/hle/kernel/handle_table.h" |
| 10 | #include "core/hle/kernel/memory/page_table.h" | 10 | #include "core/hle/kernel/k_page_table.h" |
| 11 | #include "core/hle/kernel/process_capability.h" | 11 | #include "core/hle/kernel/process_capability.h" |
| 12 | #include "core/hle/kernel/svc_results.h" | 12 | #include "core/hle/kernel/svc_results.h" |
| 13 | 13 | ||
| @@ -69,7 +69,7 @@ u32 GetFlagBitOffset(CapabilityType type) { | |||
| 69 | 69 | ||
| 70 | ResultCode ProcessCapabilities::InitializeForKernelProcess(const u32* capabilities, | 70 | ResultCode ProcessCapabilities::InitializeForKernelProcess(const u32* capabilities, |
| 71 | std::size_t num_capabilities, | 71 | std::size_t num_capabilities, |
| 72 | Memory::PageTable& page_table) { | 72 | KPageTable& page_table) { |
| 73 | Clear(); | 73 | Clear(); |
| 74 | 74 | ||
| 75 | // Allow all cores and priorities. | 75 | // Allow all cores and priorities. |
| @@ -82,7 +82,7 @@ ResultCode ProcessCapabilities::InitializeForKernelProcess(const u32* capabiliti | |||
| 82 | 82 | ||
| 83 | ResultCode ProcessCapabilities::InitializeForUserProcess(const u32* capabilities, | 83 | ResultCode ProcessCapabilities::InitializeForUserProcess(const u32* capabilities, |
| 84 | std::size_t num_capabilities, | 84 | std::size_t num_capabilities, |
| 85 | Memory::PageTable& page_table) { | 85 | KPageTable& page_table) { |
| 86 | Clear(); | 86 | Clear(); |
| 87 | 87 | ||
| 88 | return ParseCapabilities(capabilities, num_capabilities, page_table); | 88 | return ParseCapabilities(capabilities, num_capabilities, page_table); |
| @@ -108,7 +108,7 @@ void ProcessCapabilities::InitializeForMetadatalessProcess() { | |||
| 108 | 108 | ||
| 109 | ResultCode ProcessCapabilities::ParseCapabilities(const u32* capabilities, | 109 | ResultCode ProcessCapabilities::ParseCapabilities(const u32* capabilities, |
| 110 | std::size_t num_capabilities, | 110 | std::size_t num_capabilities, |
| 111 | Memory::PageTable& page_table) { | 111 | KPageTable& page_table) { |
| 112 | u32 set_flags = 0; | 112 | u32 set_flags = 0; |
| 113 | u32 set_svc_bits = 0; | 113 | u32 set_svc_bits = 0; |
| 114 | 114 | ||
| @@ -155,7 +155,7 @@ ResultCode ProcessCapabilities::ParseCapabilities(const u32* capabilities, | |||
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | ResultCode ProcessCapabilities::ParseSingleFlagCapability(u32& set_flags, u32& set_svc_bits, | 157 | ResultCode ProcessCapabilities::ParseSingleFlagCapability(u32& set_flags, u32& set_svc_bits, |
| 158 | u32 flag, Memory::PageTable& page_table) { | 158 | u32 flag, KPageTable& page_table) { |
| 159 | const auto type = GetCapabilityType(flag); | 159 | const auto type = GetCapabilityType(flag); |
| 160 | 160 | ||
| 161 | if (type == CapabilityType::Unset) { | 161 | if (type == CapabilityType::Unset) { |
| @@ -293,12 +293,12 @@ ResultCode ProcessCapabilities::HandleSyscallFlags(u32& set_svc_bits, u32 flags) | |||
| 293 | } | 293 | } |
| 294 | 294 | ||
| 295 | ResultCode ProcessCapabilities::HandleMapPhysicalFlags(u32 flags, u32 size_flags, | 295 | ResultCode ProcessCapabilities::HandleMapPhysicalFlags(u32 flags, u32 size_flags, |
| 296 | Memory::PageTable& page_table) { | 296 | KPageTable& page_table) { |
| 297 | // TODO(Lioncache): Implement once the memory manager can handle this. | 297 | // TODO(Lioncache): Implement once the memory manager can handle this. |
| 298 | return RESULT_SUCCESS; | 298 | return RESULT_SUCCESS; |
| 299 | } | 299 | } |
| 300 | 300 | ||
| 301 | ResultCode ProcessCapabilities::HandleMapIOFlags(u32 flags, Memory::PageTable& page_table) { | 301 | ResultCode ProcessCapabilities::HandleMapIOFlags(u32 flags, KPageTable& page_table) { |
| 302 | // TODO(Lioncache): Implement once the memory manager can handle this. | 302 | // TODO(Lioncache): Implement once the memory manager can handle this. |
| 303 | return RESULT_SUCCESS; | 303 | return RESULT_SUCCESS; |
| 304 | } | 304 | } |
diff --git a/src/core/hle/kernel/process_capability.h b/src/core/hle/kernel/process_capability.h index ea9d12c16..73ad197fa 100644 --- a/src/core/hle/kernel/process_capability.h +++ b/src/core/hle/kernel/process_capability.h | |||
| @@ -12,9 +12,7 @@ union ResultCode; | |||
| 12 | 12 | ||
| 13 | namespace Kernel { | 13 | namespace Kernel { |
| 14 | 14 | ||
| 15 | namespace Memory { | 15 | class KPageTable; |
| 16 | class PageTable; | ||
| 17 | } | ||
| 18 | 16 | ||
| 19 | /// The possible types of programs that may be indicated | 17 | /// The possible types of programs that may be indicated |
| 20 | /// by the program type capability descriptor. | 18 | /// by the program type capability descriptor. |
| @@ -90,7 +88,7 @@ public: | |||
| 90 | /// otherwise, an error code upon failure. | 88 | /// otherwise, an error code upon failure. |
| 91 | /// | 89 | /// |
| 92 | ResultCode InitializeForKernelProcess(const u32* capabilities, std::size_t num_capabilities, | 90 | ResultCode InitializeForKernelProcess(const u32* capabilities, std::size_t num_capabilities, |
| 93 | Memory::PageTable& page_table); | 91 | KPageTable& page_table); |
| 94 | 92 | ||
| 95 | /// Initializes this process capabilities instance for a userland process. | 93 | /// Initializes this process capabilities instance for a userland process. |
| 96 | /// | 94 | /// |
| @@ -103,7 +101,7 @@ public: | |||
| 103 | /// otherwise, an error code upon failure. | 101 | /// otherwise, an error code upon failure. |
| 104 | /// | 102 | /// |
| 105 | ResultCode InitializeForUserProcess(const u32* capabilities, std::size_t num_capabilities, | 103 | ResultCode InitializeForUserProcess(const u32* capabilities, std::size_t num_capabilities, |
| 106 | Memory::PageTable& page_table); | 104 | KPageTable& page_table); |
| 107 | 105 | ||
| 108 | /// Initializes this process capabilities instance for a process that does not | 106 | /// Initializes this process capabilities instance for a process that does not |
| 109 | /// have any metadata to parse. | 107 | /// have any metadata to parse. |
| @@ -189,7 +187,7 @@ private: | |||
| 189 | /// @return RESULT_SUCCESS if no errors occur, otherwise an error code. | 187 | /// @return RESULT_SUCCESS if no errors occur, otherwise an error code. |
| 190 | /// | 188 | /// |
| 191 | ResultCode ParseCapabilities(const u32* capabilities, std::size_t num_capabilities, | 189 | ResultCode ParseCapabilities(const u32* capabilities, std::size_t num_capabilities, |
| 192 | Memory::PageTable& page_table); | 190 | KPageTable& page_table); |
| 193 | 191 | ||
| 194 | /// Attempts to parse a capability descriptor that is only represented by a | 192 | /// Attempts to parse a capability descriptor that is only represented by a |
| 195 | /// single flag set. | 193 | /// single flag set. |
| @@ -204,7 +202,7 @@ private: | |||
| 204 | /// @return RESULT_SUCCESS if no errors occurred, otherwise an error code. | 202 | /// @return RESULT_SUCCESS if no errors occurred, otherwise an error code. |
| 205 | /// | 203 | /// |
| 206 | ResultCode ParseSingleFlagCapability(u32& set_flags, u32& set_svc_bits, u32 flag, | 204 | ResultCode ParseSingleFlagCapability(u32& set_flags, u32& set_svc_bits, u32 flag, |
| 207 | Memory::PageTable& page_table); | 205 | KPageTable& page_table); |
| 208 | 206 | ||
| 209 | /// Clears the internal state of this process capability instance. Necessary, | 207 | /// Clears the internal state of this process capability instance. Necessary, |
| 210 | /// to have a sane starting point due to us allowing running executables without | 208 | /// to have a sane starting point due to us allowing running executables without |
| @@ -228,10 +226,10 @@ private: | |||
| 228 | ResultCode HandleSyscallFlags(u32& set_svc_bits, u32 flags); | 226 | ResultCode HandleSyscallFlags(u32& set_svc_bits, u32 flags); |
| 229 | 227 | ||
| 230 | /// Handles flags related to mapping physical memory pages. | 228 | /// Handles flags related to mapping physical memory pages. |
| 231 | ResultCode HandleMapPhysicalFlags(u32 flags, u32 size_flags, Memory::PageTable& page_table); | 229 | ResultCode HandleMapPhysicalFlags(u32 flags, u32 size_flags, KPageTable& page_table); |
| 232 | 230 | ||
| 233 | /// Handles flags related to mapping IO pages. | 231 | /// Handles flags related to mapping IO pages. |
| 234 | ResultCode HandleMapIOFlags(u32 flags, Memory::PageTable& page_table); | 232 | ResultCode HandleMapIOFlags(u32 flags, KPageTable& page_table); |
| 235 | 233 | ||
| 236 | /// Handles flags related to the interrupt capability flags. | 234 | /// Handles flags related to the interrupt capability flags. |
| 237 | ResultCode HandleInterruptFlags(u32 flags); | 235 | ResultCode HandleInterruptFlags(u32 flags); |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 4ffd65d33..cc8fa6576 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include "core/hle/kernel/k_event.h" | 29 | #include "core/hle/kernel/k_event.h" |
| 30 | #include "core/hle/kernel/k_memory_block.h" | 30 | #include "core/hle/kernel/k_memory_block.h" |
| 31 | #include "core/hle/kernel/k_memory_layout.h" | 31 | #include "core/hle/kernel/k_memory_layout.h" |
| 32 | #include "core/hle/kernel/k_page_table.h" | ||
| 32 | #include "core/hle/kernel/k_readable_event.h" | 33 | #include "core/hle/kernel/k_readable_event.h" |
| 33 | #include "core/hle/kernel/k_resource_limit.h" | 34 | #include "core/hle/kernel/k_resource_limit.h" |
| 34 | #include "core/hle/kernel/k_scheduler.h" | 35 | #include "core/hle/kernel/k_scheduler.h" |
| @@ -39,7 +40,6 @@ | |||
| 39 | #include "core/hle/kernel/k_thread.h" | 40 | #include "core/hle/kernel/k_thread.h" |
| 40 | #include "core/hle/kernel/k_writable_event.h" | 41 | #include "core/hle/kernel/k_writable_event.h" |
| 41 | #include "core/hle/kernel/kernel.h" | 42 | #include "core/hle/kernel/kernel.h" |
| 42 | #include "core/hle/kernel/memory/page_table.h" | ||
| 43 | #include "core/hle/kernel/physical_core.h" | 43 | #include "core/hle/kernel/physical_core.h" |
| 44 | #include "core/hle/kernel/process.h" | 44 | #include "core/hle/kernel/process.h" |
| 45 | #include "core/hle/kernel/svc.h" | 45 | #include "core/hle/kernel/svc.h" |
| @@ -67,8 +67,8 @@ constexpr bool IsValidAddressRange(VAddr address, u64 size) { | |||
| 67 | // Helper function that performs the common sanity checks for svcMapMemory | 67 | // Helper function that performs the common sanity checks for svcMapMemory |
| 68 | // and svcUnmapMemory. This is doable, as both functions perform their sanitizing | 68 | // and svcUnmapMemory. This is doable, as both functions perform their sanitizing |
| 69 | // in the same order. | 69 | // in the same order. |
| 70 | ResultCode MapUnmapMemorySanityChecks(const Memory::PageTable& manager, VAddr dst_addr, | 70 | ResultCode MapUnmapMemorySanityChecks(const KPageTable& manager, VAddr dst_addr, VAddr src_addr, |
| 71 | VAddr src_addr, u64 size) { | 71 | u64 size) { |
| 72 | if (!Common::Is4KBAligned(dst_addr)) { | 72 | if (!Common::Is4KBAligned(dst_addr)) { |
| 73 | LOG_ERROR(Kernel_SVC, "Destination address is not aligned to 4KB, 0x{:016X}", dst_addr); | 73 | LOG_ERROR(Kernel_SVC, "Destination address is not aligned to 4KB, 0x{:016X}", dst_addr); |
| 74 | return ResultInvalidAddress; | 74 | return ResultInvalidAddress; |
diff --git a/src/core/hle/kernel/transfer_memory.cpp b/src/core/hle/kernel/transfer_memory.cpp index b92559616..cad063e4d 100644 --- a/src/core/hle/kernel/transfer_memory.cpp +++ b/src/core/hle/kernel/transfer_memory.cpp | |||
| @@ -2,9 +2,9 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include "core/hle/kernel/k_page_table.h" | ||
| 5 | #include "core/hle/kernel/k_resource_limit.h" | 6 | #include "core/hle/kernel/k_resource_limit.h" |
| 6 | #include "core/hle/kernel/kernel.h" | 7 | #include "core/hle/kernel/kernel.h" |
| 7 | #include "core/hle/kernel/memory/page_table.h" | ||
| 8 | #include "core/hle/kernel/process.h" | 8 | #include "core/hle/kernel/process.h" |
| 9 | #include "core/hle/kernel/transfer_memory.h" | 9 | #include "core/hle/kernel/transfer_memory.h" |
| 10 | #include "core/hle/result.h" | 10 | #include "core/hle/result.h" |
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index b42184a3b..d111c1357 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp | |||
| @@ -11,8 +11,8 @@ | |||
| 11 | #include "common/scope_exit.h" | 11 | #include "common/scope_exit.h" |
| 12 | #include "core/core.h" | 12 | #include "core/core.h" |
| 13 | #include "core/hle/ipc_helpers.h" | 13 | #include "core/hle/ipc_helpers.h" |
| 14 | #include "core/hle/kernel/k_page_table.h" | ||
| 14 | #include "core/hle/kernel/k_system_control.h" | 15 | #include "core/hle/kernel/k_system_control.h" |
| 15 | #include "core/hle/kernel/memory/page_table.h" | ||
| 16 | #include "core/hle/kernel/process.h" | 16 | #include "core/hle/kernel/process.h" |
| 17 | #include "core/hle/kernel/svc_results.h" | 17 | #include "core/hle/kernel/svc_results.h" |
| 18 | #include "core/hle/service/ldr/ldr.h" | 18 | #include "core/hle/service/ldr/ldr.h" |
| @@ -287,8 +287,7 @@ public: | |||
| 287 | rb.Push(RESULT_SUCCESS); | 287 | rb.Push(RESULT_SUCCESS); |
| 288 | } | 288 | } |
| 289 | 289 | ||
| 290 | bool ValidateRegionForMap(Kernel::Memory::PageTable& page_table, VAddr start, | 290 | bool ValidateRegionForMap(Kernel::KPageTable& page_table, VAddr start, std::size_t size) const { |
| 291 | std::size_t size) const { | ||
| 292 | constexpr std::size_t padding_size{4 * Kernel::PageSize}; | 291 | constexpr std::size_t padding_size{4 * Kernel::PageSize}; |
| 293 | const auto start_info{page_table.QueryInfo(start - 1)}; | 292 | const auto start_info{page_table.QueryInfo(start - 1)}; |
| 294 | 293 | ||
| @@ -309,7 +308,7 @@ public: | |||
| 309 | return (start + size + padding_size) <= (end_info.GetAddress() + end_info.GetSize()); | 308 | return (start + size + padding_size) <= (end_info.GetAddress() + end_info.GetSize()); |
| 310 | } | 309 | } |
| 311 | 310 | ||
| 312 | VAddr GetRandomMapRegion(const Kernel::Memory::PageTable& page_table, std::size_t size) const { | 311 | VAddr GetRandomMapRegion(const Kernel::KPageTable& page_table, std::size_t size) const { |
| 313 | VAddr addr{}; | 312 | VAddr addr{}; |
| 314 | const std::size_t end_pages{(page_table.GetAliasCodeRegionSize() - size) >> | 313 | const std::size_t end_pages{(page_table.GetAliasCodeRegionSize() - size) >> |
| 315 | Kernel::PageBits}; | 314 | Kernel::PageBits}; |
diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp index 79ebf11de..4a10211f6 100644 --- a/src/core/loader/deconstructed_rom_directory.cpp +++ b/src/core/loader/deconstructed_rom_directory.cpp | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | #include "core/file_sys/control_metadata.h" | 12 | #include "core/file_sys/control_metadata.h" |
| 13 | #include "core/file_sys/patch_manager.h" | 13 | #include "core/file_sys/patch_manager.h" |
| 14 | #include "core/file_sys/romfs_factory.h" | 14 | #include "core/file_sys/romfs_factory.h" |
| 15 | #include "core/hle/kernel/k_page_table.h" | ||
| 15 | #include "core/hle/kernel/kernel.h" | 16 | #include "core/hle/kernel/kernel.h" |
| 16 | #include "core/hle/kernel/memory/page_table.h" | ||
| 17 | #include "core/hle/kernel/process.h" | 17 | #include "core/hle/kernel/process.h" |
| 18 | #include "core/hle/service/filesystem/filesystem.h" | 18 | #include "core/hle/service/filesystem/filesystem.h" |
| 19 | #include "core/loader/deconstructed_rom_directory.h" | 19 | #include "core/loader/deconstructed_rom_directory.h" |
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index dca1fcb18..f4a339390 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include "common/file_util.h" | 10 | #include "common/file_util.h" |
| 11 | #include "common/logging/log.h" | 11 | #include "common/logging/log.h" |
| 12 | #include "core/hle/kernel/code_set.h" | 12 | #include "core/hle/kernel/code_set.h" |
| 13 | #include "core/hle/kernel/memory/page_table.h" | 13 | #include "core/hle/kernel/k_page_table.h" |
| 14 | #include "core/hle/kernel/process.h" | 14 | #include "core/hle/kernel/process.h" |
| 15 | #include "core/loader/elf.h" | 15 | #include "core/loader/elf.h" |
| 16 | #include "core/memory.h" | 16 | #include "core/memory.h" |
diff --git a/src/core/loader/kip.cpp b/src/core/loader/kip.cpp index e162c4ff0..3f4ba233d 100644 --- a/src/core/loader/kip.cpp +++ b/src/core/loader/kip.cpp | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | #include "core/file_sys/kernel_executable.h" | 6 | #include "core/file_sys/kernel_executable.h" |
| 7 | #include "core/file_sys/program_metadata.h" | 7 | #include "core/file_sys/program_metadata.h" |
| 8 | #include "core/hle/kernel/code_set.h" | 8 | #include "core/hle/kernel/code_set.h" |
| 9 | #include "core/hle/kernel/memory/page_table.h" | 9 | #include "core/hle/kernel/k_page_table.h" |
| 10 | #include "core/hle/kernel/process.h" | 10 | #include "core/hle/kernel/process.h" |
| 11 | #include "core/loader/kip.h" | 11 | #include "core/loader/kip.h" |
| 12 | #include "core/memory.h" | 12 | #include "core/memory.h" |
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index f976d0a9c..14618cb40 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp | |||
| @@ -15,8 +15,8 @@ | |||
| 15 | #include "core/file_sys/romfs_factory.h" | 15 | #include "core/file_sys/romfs_factory.h" |
| 16 | #include "core/file_sys/vfs_offset.h" | 16 | #include "core/file_sys/vfs_offset.h" |
| 17 | #include "core/hle/kernel/code_set.h" | 17 | #include "core/hle/kernel/code_set.h" |
| 18 | #include "core/hle/kernel/k_page_table.h" | ||
| 18 | #include "core/hle/kernel/k_thread.h" | 19 | #include "core/hle/kernel/k_thread.h" |
| 19 | #include "core/hle/kernel/memory/page_table.h" | ||
| 20 | #include "core/hle/kernel/process.h" | 20 | #include "core/hle/kernel/process.h" |
| 21 | #include "core/hle/service/filesystem/filesystem.h" | 21 | #include "core/hle/service/filesystem/filesystem.h" |
| 22 | #include "core/loader/nro.h" | 22 | #include "core/loader/nro.h" |
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp index ea347ea83..cbd048695 100644 --- a/src/core/loader/nso.cpp +++ b/src/core/loader/nso.cpp | |||
| @@ -15,8 +15,8 @@ | |||
| 15 | #include "core/core.h" | 15 | #include "core/core.h" |
| 16 | #include "core/file_sys/patch_manager.h" | 16 | #include "core/file_sys/patch_manager.h" |
| 17 | #include "core/hle/kernel/code_set.h" | 17 | #include "core/hle/kernel/code_set.h" |
| 18 | #include "core/hle/kernel/k_page_table.h" | ||
| 18 | #include "core/hle/kernel/k_thread.h" | 19 | #include "core/hle/kernel/k_thread.h" |
| 19 | #include "core/hle/kernel/memory/page_table.h" | ||
| 20 | #include "core/hle/kernel/process.h" | 20 | #include "core/hle/kernel/process.h" |
| 21 | #include "core/loader/nso.h" | 21 | #include "core/loader/nso.h" |
| 22 | #include "core/memory.h" | 22 | #include "core/memory.h" |
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 11609682a..b9dd3e275 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include "core/arm/arm_interface.h" | 16 | #include "core/arm/arm_interface.h" |
| 17 | #include "core/core.h" | 17 | #include "core/core.h" |
| 18 | #include "core/device_memory.h" | 18 | #include "core/device_memory.h" |
| 19 | #include "core/hle/kernel/memory/page_table.h" | 19 | #include "core/hle/kernel/k_page_table.h" |
| 20 | #include "core/hle/kernel/physical_memory.h" | 20 | #include "core/hle/kernel/physical_memory.h" |
| 21 | #include "core/hle/kernel/process.h" | 21 | #include "core/hle/kernel/process.h" |
| 22 | #include "core/memory.h" | 22 | #include "core/memory.h" |
diff --git a/src/core/memory/cheat_engine.cpp b/src/core/memory/cheat_engine.cpp index 2dd0eb0f8..8eec567ab 100644 --- a/src/core/memory/cheat_engine.cpp +++ b/src/core/memory/cheat_engine.cpp | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include "core/core_timing.h" | 10 | #include "core/core_timing.h" |
| 11 | #include "core/core_timing_util.h" | 11 | #include "core/core_timing_util.h" |
| 12 | #include "core/hardware_properties.h" | 12 | #include "core/hardware_properties.h" |
| 13 | #include "core/hle/kernel/memory/page_table.h" | 13 | #include "core/hle/kernel/k_page_table.h" |
| 14 | #include "core/hle/kernel/process.h" | 14 | #include "core/hle/kernel/process.h" |
| 15 | #include "core/hle/service/hid/controllers/npad.h" | 15 | #include "core/hle/service/hid/controllers/npad.h" |
| 16 | #include "core/hle/service/hid/hid.h" | 16 | #include "core/hle/service/hid/hid.h" |
diff --git a/src/core/reporter.cpp b/src/core/reporter.cpp index f199c3362..74fb32814 100644 --- a/src/core/reporter.cpp +++ b/src/core/reporter.cpp | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include "core/arm/arm_interface.h" | 17 | #include "core/arm/arm_interface.h" |
| 18 | #include "core/core.h" | 18 | #include "core/core.h" |
| 19 | #include "core/hle/kernel/hle_ipc.h" | 19 | #include "core/hle/kernel/hle_ipc.h" |
| 20 | #include "core/hle/kernel/memory/page_table.h" | 20 | #include "core/hle/kernel/k_page_table.h" |
| 21 | #include "core/hle/kernel/process.h" | 21 | #include "core/hle/kernel/process.h" |
| 22 | #include "core/hle/result.h" | 22 | #include "core/hle/result.h" |
| 23 | #include "core/memory.h" | 23 | #include "core/memory.h" |
diff --git a/src/video_core/memory_manager.cpp b/src/video_core/memory_manager.cpp index 44240a9c4..4eb71efbd 100644 --- a/src/video_core/memory_manager.cpp +++ b/src/video_core/memory_manager.cpp | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | #include "common/assert.h" | 6 | #include "common/assert.h" |
| 7 | #include "common/logging/log.h" | 7 | #include "common/logging/log.h" |
| 8 | #include "core/core.h" | 8 | #include "core/core.h" |
| 9 | #include "core/hle/kernel/memory/page_table.h" | 9 | #include "core/hle/kernel/k_page_table.h" |
| 10 | #include "core/hle/kernel/process.h" | 10 | #include "core/hle/kernel/process.h" |
| 11 | #include "core/memory.h" | 11 | #include "core/memory.h" |
| 12 | #include "video_core/gpu.h" | 12 | #include "video_core/gpu.h" |