diff options
| author | 2021-02-12 17:26:01 -0800 | |
|---|---|---|
| committer | 2021-02-18 16:16:25 -0800 | |
| commit | 93109c870e957d495d24d61d94f7761c72f5624f (patch) | |
| tree | 4fabf70f2f4e11f013007935ba61430640535b86 | |
| parent | hle: kernel: Migrate to KMemoryBlock, KMemoryBlockManager, and others. (diff) | |
| download | yuzu-93109c870e957d495d24d61d94f7761c72f5624f.tar.gz yuzu-93109c870e957d495d24d61d94f7761c72f5624f.tar.xz yuzu-93109c870e957d495d24d61d94f7761c72f5624f.zip | |
hle: kernel: Migrate PageLinkedList to KPageLinkedList.
| -rw-r--r-- | src/core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_page_linked_list.h (renamed from src/core/hle/kernel/memory/page_linked_list.h) | 12 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_shared_memory.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_shared_memory.h | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/memory_manager.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/memory_manager.h | 10 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/page_table.cpp | 30 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/page_table.h | 11 |
8 files changed, 41 insertions, 38 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index a304dd935..70dab3f74 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -171,6 +171,7 @@ add_library(core STATIC | |||
| 171 | hle/kernel/k_memory_block_manager.h | 171 | hle/kernel/k_memory_block_manager.h |
| 172 | hle/kernel/k_memory_layout.h | 172 | hle/kernel/k_memory_layout.h |
| 173 | hle/kernel/k_page_bitmap.h | 173 | hle/kernel/k_page_bitmap.h |
| 174 | hle/kernel/k_page_linked_list.h | ||
| 174 | hle/kernel/k_priority_queue.h | 175 | hle/kernel/k_priority_queue.h |
| 175 | hle/kernel/k_readable_event.cpp | 176 | hle/kernel/k_readable_event.cpp |
| 176 | hle/kernel/k_readable_event.h | 177 | hle/kernel/k_readable_event.h |
| @@ -201,7 +202,6 @@ add_library(core STATIC | |||
| 201 | hle/kernel/memory_types.h | 202 | hle/kernel/memory_types.h |
| 202 | hle/kernel/memory/memory_manager.cpp | 203 | hle/kernel/memory/memory_manager.cpp |
| 203 | hle/kernel/memory/memory_manager.h | 204 | hle/kernel/memory/memory_manager.h |
| 204 | hle/kernel/memory/page_linked_list.h | ||
| 205 | hle/kernel/memory/page_heap.cpp | 205 | hle/kernel/memory/page_heap.cpp |
| 206 | hle/kernel/memory/page_heap.h | 206 | hle/kernel/memory/page_heap.h |
| 207 | hle/kernel/memory/page_table.cpp | 207 | hle/kernel/memory/page_table.cpp |
diff --git a/src/core/hle/kernel/memory/page_linked_list.h b/src/core/hle/kernel/k_page_linked_list.h index 9b871f15b..64024d01f 100644 --- a/src/core/hle/kernel/memory/page_linked_list.h +++ b/src/core/hle/kernel/k_page_linked_list.h | |||
| @@ -11,9 +11,9 @@ | |||
| 11 | #include "core/hle/kernel/memory_types.h" | 11 | #include "core/hle/kernel/memory_types.h" |
| 12 | #include "core/hle/result.h" | 12 | #include "core/hle/result.h" |
| 13 | 13 | ||
| 14 | namespace Kernel::Memory { | 14 | namespace Kernel { |
| 15 | 15 | ||
| 16 | class PageLinkedList final { | 16 | class KPageLinkedList final { |
| 17 | public: | 17 | public: |
| 18 | class Node final { | 18 | class Node final { |
| 19 | public: | 19 | public: |
| @@ -33,8 +33,8 @@ public: | |||
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | public: | 35 | public: |
| 36 | PageLinkedList() = default; | 36 | KPageLinkedList() = default; |
| 37 | PageLinkedList(u64 address, u64 num_pages) { | 37 | KPageLinkedList(u64 address, u64 num_pages) { |
| 38 | ASSERT(AddBlock(address, num_pages).IsSuccess()); | 38 | ASSERT(AddBlock(address, num_pages).IsSuccess()); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| @@ -54,7 +54,7 @@ public: | |||
| 54 | return num_pages; | 54 | return num_pages; |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | bool IsEqual(PageLinkedList& other) const { | 57 | bool IsEqual(KPageLinkedList& other) const { |
| 58 | auto this_node = nodes.begin(); | 58 | auto this_node = nodes.begin(); |
| 59 | auto other_node = other.nodes.begin(); | 59 | auto other_node = other.nodes.begin(); |
| 60 | while (this_node != nodes.end() && other_node != other.nodes.end()) { | 60 | while (this_node != nodes.end() && other_node != other.nodes.end()) { |
| @@ -89,4 +89,4 @@ private: | |||
| 89 | std::list<Node> nodes; | 89 | std::list<Node> nodes; |
| 90 | }; | 90 | }; |
| 91 | 91 | ||
| 92 | } // namespace Kernel::Memory | 92 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_shared_memory.cpp b/src/core/hle/kernel/k_shared_memory.cpp index eb48afe9d..aade52764 100644 --- a/src/core/hle/kernel/k_shared_memory.cpp +++ b/src/core/hle/kernel/k_shared_memory.cpp | |||
| @@ -20,7 +20,7 @@ KSharedMemory::~KSharedMemory() { | |||
| 20 | 20 | ||
| 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 | Memory::PageLinkedList&& 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, |
| 25 | std::string name) { | 25 | std::string name) { |
| 26 | 26 | ||
diff --git a/src/core/hle/kernel/k_shared_memory.h b/src/core/hle/kernel/k_shared_memory.h index 1ecb4f7dd..016e34be5 100644 --- a/src/core/hle/kernel/k_shared_memory.h +++ b/src/core/hle/kernel/k_shared_memory.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 11 | #include "core/device_memory.h" | 11 | #include "core/device_memory.h" |
| 12 | #include "core/hle/kernel/k_memory_block.h" | 12 | #include "core/hle/kernel/k_memory_block.h" |
| 13 | #include "core/hle/kernel/memory/page_linked_list.h" | 13 | #include "core/hle/kernel/k_page_linked_list.h" |
| 14 | #include "core/hle/kernel/object.h" | 14 | #include "core/hle/kernel/object.h" |
| 15 | #include "core/hle/kernel/process.h" | 15 | #include "core/hle/kernel/process.h" |
| 16 | #include "core/hle/result.h" | 16 | #include "core/hle/result.h" |
| @@ -26,7 +26,7 @@ public: | |||
| 26 | 26 | ||
| 27 | static std::shared_ptr<KSharedMemory> Create( | 27 | static std::shared_ptr<KSharedMemory> Create( |
| 28 | KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process, | 28 | KernelCore& kernel, Core::DeviceMemory& device_memory, Process* owner_process, |
| 29 | Memory::PageLinkedList&& page_list, KMemoryPermission owner_permission, | 29 | KPageLinkedList&& page_list, KMemoryPermission owner_permission, |
| 30 | KMemoryPermission user_permission, PAddr physical_address, std::size_t size, | 30 | KMemoryPermission user_permission, PAddr physical_address, std::size_t size, |
| 31 | std::string name); | 31 | std::string name); |
| 32 | 32 | ||
| @@ -76,7 +76,7 @@ public: | |||
| 76 | private: | 76 | private: |
| 77 | Core::DeviceMemory& device_memory; | 77 | Core::DeviceMemory& device_memory; |
| 78 | Process* owner_process{}; | 78 | Process* owner_process{}; |
| 79 | Memory::PageLinkedList page_list; | 79 | KPageLinkedList page_list; |
| 80 | KMemoryPermission owner_permission{}; | 80 | KMemoryPermission owner_permission{}; |
| 81 | KMemoryPermission user_permission{}; | 81 | KMemoryPermission user_permission{}; |
| 82 | PAddr physical_address{}; | 82 | PAddr physical_address{}; |
diff --git a/src/core/hle/kernel/memory/memory_manager.cpp b/src/core/hle/kernel/memory/memory_manager.cpp index ffda77374..00d5b15f3 100644 --- a/src/core/hle/kernel/memory/memory_manager.cpp +++ b/src/core/hle/kernel/memory/memory_manager.cpp | |||
| @@ -8,8 +8,8 @@ | |||
| 8 | #include "common/assert.h" | 8 | #include "common/assert.h" |
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "common/scope_exit.h" | 10 | #include "common/scope_exit.h" |
| 11 | #include "core/hle/kernel/k_page_linked_list.h" | ||
| 11 | #include "core/hle/kernel/memory/memory_manager.h" | 12 | #include "core/hle/kernel/memory/memory_manager.h" |
| 12 | #include "core/hle/kernel/memory/page_linked_list.h" | ||
| 13 | #include "core/hle/kernel/svc_results.h" | 13 | #include "core/hle/kernel/svc_results.h" |
| 14 | 14 | ||
| 15 | namespace Kernel::Memory { | 15 | namespace Kernel::Memory { |
| @@ -80,7 +80,7 @@ VAddr MemoryManager::AllocateAndOpenContinuous(std::size_t num_pages, std::size_ | |||
| 80 | return allocated_block; | 80 | return allocated_block; |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | ResultCode MemoryManager::Allocate(PageLinkedList& page_list, std::size_t num_pages, Pool pool, | 83 | ResultCode MemoryManager::Allocate(KPageLinkedList& page_list, std::size_t num_pages, Pool pool, |
| 84 | Direction dir) { | 84 | Direction dir) { |
| 85 | ASSERT(page_list.GetNumPages() == 0); | 85 | ASSERT(page_list.GetNumPages() == 0); |
| 86 | 86 | ||
| @@ -149,7 +149,7 @@ ResultCode MemoryManager::Allocate(PageLinkedList& page_list, std::size_t num_pa | |||
| 149 | return RESULT_SUCCESS; | 149 | return RESULT_SUCCESS; |
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | ResultCode MemoryManager::Free(PageLinkedList& page_list, std::size_t num_pages, Pool pool, | 152 | ResultCode MemoryManager::Free(KPageLinkedList& page_list, std::size_t num_pages, Pool pool, |
| 153 | Direction dir) { | 153 | Direction dir) { |
| 154 | // Early return if we're freeing no pages | 154 | // Early return if we're freeing no pages |
| 155 | if (!num_pages) { | 155 | if (!num_pages) { |
diff --git a/src/core/hle/kernel/memory/memory_manager.h b/src/core/hle/kernel/memory/memory_manager.h index 80dfbc8c2..d090979bd 100644 --- a/src/core/hle/kernel/memory/memory_manager.h +++ b/src/core/hle/kernel/memory/memory_manager.h | |||
| @@ -13,9 +13,11 @@ | |||
| 13 | #include "core/hle/kernel/memory/page_heap.h" | 13 | #include "core/hle/kernel/memory/page_heap.h" |
| 14 | #include "core/hle/result.h" | 14 | #include "core/hle/result.h" |
| 15 | 15 | ||
| 16 | namespace Kernel::Memory { | 16 | namespace Kernel { |
| 17 | class KPageLinkedList; | ||
| 18 | } | ||
| 17 | 19 | ||
| 18 | class PageLinkedList; | 20 | namespace Kernel::Memory { |
| 19 | 21 | ||
| 20 | class MemoryManager final : NonCopyable { | 22 | class MemoryManager final : NonCopyable { |
| 21 | public: | 23 | public: |
| @@ -48,9 +50,9 @@ public: | |||
| 48 | void InitializeManager(Pool pool, u64 start_address, u64 end_address); | 50 | void InitializeManager(Pool pool, u64 start_address, u64 end_address); |
| 49 | 51 | ||
| 50 | VAddr AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, u32 option); | 52 | VAddr AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, u32 option); |
| 51 | ResultCode Allocate(PageLinkedList& page_list, std::size_t num_pages, Pool pool, | 53 | ResultCode Allocate(KPageLinkedList& page_list, std::size_t num_pages, Pool pool, |
| 52 | Direction dir = Direction::FromFront); | 54 | Direction dir = Direction::FromFront); |
| 53 | ResultCode Free(PageLinkedList& page_list, std::size_t num_pages, Pool pool, | 55 | ResultCode Free(KPageLinkedList& page_list, std::size_t num_pages, Pool pool, |
| 54 | Direction dir = Direction::FromFront); | 56 | Direction dir = Direction::FromFront); |
| 55 | 57 | ||
| 56 | static constexpr std::size_t MaxManagerCount = 10; | 58 | static constexpr std::size_t MaxManagerCount = 10; |
diff --git a/src/core/hle/kernel/memory/page_table.cpp b/src/core/hle/kernel/memory/page_table.cpp index 183482648..c1efc23de 100644 --- a/src/core/hle/kernel/memory/page_table.cpp +++ b/src/core/hle/kernel/memory/page_table.cpp | |||
| @@ -9,11 +9,11 @@ | |||
| 9 | #include "core/hle/kernel/k_address_space_info.h" | 9 | #include "core/hle/kernel/k_address_space_info.h" |
| 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_resource_limit.h" | 13 | #include "core/hle/kernel/k_resource_limit.h" |
| 13 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 14 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 14 | #include "core/hle/kernel/k_system_control.h" | 15 | #include "core/hle/kernel/k_system_control.h" |
| 15 | #include "core/hle/kernel/kernel.h" | 16 | #include "core/hle/kernel/kernel.h" |
| 16 | #include "core/hle/kernel/memory/page_linked_list.h" | ||
| 17 | #include "core/hle/kernel/memory/page_table.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" |
| @@ -285,7 +285,7 @@ ResultCode PageTable::MapProcessCode(VAddr addr, std::size_t num_pages, KMemoryS | |||
| 285 | return ResultInvalidCurrentMemory; | 285 | return ResultInvalidCurrentMemory; |
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | PageLinkedList page_linked_list; | 288 | KPageLinkedList page_linked_list; |
| 289 | CASCADE_CODE( | 289 | CASCADE_CODE( |
| 290 | system.Kernel().MemoryManager().Allocate(page_linked_list, num_pages, memory_pool)); | 290 | system.Kernel().MemoryManager().Allocate(page_linked_list, num_pages, memory_pool)); |
| 291 | CASCADE_CODE(Operate(addr, num_pages, page_linked_list, OperationType::MapGroup)); | 291 | CASCADE_CODE(Operate(addr, num_pages, page_linked_list, OperationType::MapGroup)); |
| @@ -311,7 +311,7 @@ ResultCode PageTable::MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std:: | |||
| 311 | return ResultInvalidCurrentMemory; | 311 | return ResultInvalidCurrentMemory; |
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | PageLinkedList page_linked_list; | 314 | KPageLinkedList page_linked_list; |
| 315 | AddRegionToPages(src_addr, num_pages, page_linked_list); | 315 | AddRegionToPages(src_addr, num_pages, page_linked_list); |
| 316 | 316 | ||
| 317 | { | 317 | { |
| @@ -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(PageLinkedList& page_linked_list, VAddr start, VAddr end) { | 366 | void PageTable::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()}; |
| @@ -423,7 +423,7 @@ ResultCode PageTable::MapPhysicalMemory(VAddr addr, std::size_t size) { | |||
| 423 | return ResultResourceLimitedExceeded; | 423 | return ResultResourceLimitedExceeded; |
| 424 | } | 424 | } |
| 425 | 425 | ||
| 426 | PageLinkedList page_linked_list; | 426 | KPageLinkedList page_linked_list; |
| 427 | 427 | ||
| 428 | CASCADE_CODE( | 428 | CASCADE_CODE( |
| 429 | system.Kernel().MemoryManager().Allocate(page_linked_list, remaining_pages, memory_pool)); | 429 | system.Kernel().MemoryManager().Allocate(page_linked_list, remaining_pages, memory_pool)); |
| @@ -485,7 +485,7 @@ ResultCode PageTable::UnmapMemory(VAddr addr, std::size_t size) { | |||
| 485 | 485 | ||
| 486 | const VAddr end_addr{addr + size}; | 486 | const VAddr end_addr{addr + size}; |
| 487 | ResultCode result{RESULT_SUCCESS}; | 487 | ResultCode result{RESULT_SUCCESS}; |
| 488 | PageLinkedList page_linked_list; | 488 | KPageLinkedList page_linked_list; |
| 489 | 489 | ||
| 490 | // Unmap each region within the range | 490 | // Unmap each region within the range |
| 491 | block_manager->IterateForRange(addr, end_addr, [&](const KMemoryInfo& info) { | 491 | block_manager->IterateForRange(addr, end_addr, [&](const KMemoryInfo& info) { |
| @@ -529,7 +529,7 @@ ResultCode PageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) { | |||
| 529 | return ResultInvalidCurrentMemory; | 529 | return ResultInvalidCurrentMemory; |
| 530 | } | 530 | } |
| 531 | 531 | ||
| 532 | PageLinkedList page_linked_list; | 532 | KPageLinkedList page_linked_list; |
| 533 | const std::size_t num_pages{size / PageSize}; | 533 | const std::size_t num_pages{size / PageSize}; |
| 534 | 534 | ||
| 535 | AddRegionToPages(src_addr, num_pages, page_linked_list); | 535 | AddRegionToPages(src_addr, num_pages, page_linked_list); |
| @@ -570,8 +570,8 @@ ResultCode PageTable::Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size) { | |||
| 570 | KMemoryPermission::None, KMemoryAttribute::Mask, | 570 | KMemoryPermission::None, KMemoryAttribute::Mask, |
| 571 | KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped)); | 571 | KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped)); |
| 572 | 572 | ||
| 573 | PageLinkedList src_pages; | 573 | KPageLinkedList src_pages; |
| 574 | PageLinkedList dst_pages; | 574 | KPageLinkedList dst_pages; |
| 575 | const std::size_t num_pages{size / PageSize}; | 575 | const std::size_t num_pages{size / PageSize}; |
| 576 | 576 | ||
| 577 | AddRegionToPages(src_addr, num_pages, src_pages); | 577 | AddRegionToPages(src_addr, num_pages, src_pages); |
| @@ -597,7 +597,7 @@ 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 PageLinkedList& page_linked_list, | 600 | ResultCode PageTable::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 | ||
| @@ -619,7 +619,7 @@ ResultCode PageTable::MapPages(VAddr addr, const PageLinkedList& page_linked_lis | |||
| 619 | return RESULT_SUCCESS; | 619 | return RESULT_SUCCESS; |
| 620 | } | 620 | } |
| 621 | 621 | ||
| 622 | ResultCode PageTable::MapPages(VAddr addr, PageLinkedList& page_linked_list, KMemoryState state, | 622 | ResultCode PageTable::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 | ||
| @@ -793,7 +793,7 @@ ResultVal<VAddr> PageTable::SetHeapSize(std::size_t size) { | |||
| 793 | return ResultResourceLimitedExceeded; | 793 | return ResultResourceLimitedExceeded; |
| 794 | } | 794 | } |
| 795 | 795 | ||
| 796 | PageLinkedList page_linked_list; | 796 | KPageLinkedList page_linked_list; |
| 797 | const std::size_t num_pages{delta / PageSize}; | 797 | const std::size_t num_pages{delta / PageSize}; |
| 798 | 798 | ||
| 799 | CASCADE_CODE( | 799 | CASCADE_CODE( |
| @@ -841,7 +841,7 @@ ResultVal<VAddr> PageTable::AllocateAndMapMemory(std::size_t needed_num_pages, s | |||
| 841 | if (is_map_only) { | 841 | if (is_map_only) { |
| 842 | CASCADE_CODE(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr)); | 842 | CASCADE_CODE(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr)); |
| 843 | } else { | 843 | } else { |
| 844 | PageLinkedList page_group; | 844 | KPageLinkedList page_group; |
| 845 | CASCADE_CODE( | 845 | CASCADE_CODE( |
| 846 | system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, memory_pool)); | 846 | system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, memory_pool)); |
| 847 | CASCADE_CODE(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup)); | 847 | CASCADE_CODE(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup)); |
| @@ -924,7 +924,7 @@ bool PageTable::IsRegionContiguous(VAddr addr, u64 size) const { | |||
| 924 | } | 924 | } |
| 925 | 925 | ||
| 926 | void PageTable::AddRegionToPages(VAddr start, std::size_t num_pages, | 926 | void PageTable::AddRegionToPages(VAddr start, std::size_t num_pages, |
| 927 | PageLinkedList& 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)}; |
| @@ -945,7 +945,7 @@ 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 PageLinkedList& page_group, | 948 | ResultCode PageTable::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 | ||
diff --git a/src/core/hle/kernel/memory/page_table.h b/src/core/hle/kernel/memory/page_table.h index a4914d050..736583b81 100644 --- a/src/core/hle/kernel/memory/page_table.h +++ b/src/core/hle/kernel/memory/page_table.h | |||
| @@ -40,7 +40,7 @@ public: | |||
| 40 | ResultCode UnmapMemory(VAddr addr, std::size_t size); | 40 | ResultCode UnmapMemory(VAddr addr, std::size_t size); |
| 41 | ResultCode Map(VAddr dst_addr, VAddr src_addr, std::size_t size); | 41 | ResultCode Map(VAddr dst_addr, VAddr src_addr, std::size_t size); |
| 42 | ResultCode Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size); | 42 | ResultCode Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size); |
| 43 | ResultCode MapPages(VAddr addr, PageLinkedList& page_linked_list, KMemoryState state, | 43 | ResultCode MapPages(VAddr addr, KPageLinkedList& page_linked_list, KMemoryState state, |
| 44 | KMemoryPermission perm); | 44 | KMemoryPermission perm); |
| 45 | ResultCode SetCodeMemoryPermission(VAddr addr, std::size_t size, KMemoryPermission perm); | 45 | ResultCode SetCodeMemoryPermission(VAddr addr, std::size_t size, KMemoryPermission perm); |
| 46 | KMemoryInfo QueryInfo(VAddr addr); | 46 | KMemoryInfo QueryInfo(VAddr addr); |
| @@ -79,15 +79,16 @@ private: | |||
| 79 | KMemoryAttribute::DeviceShared; | 79 | KMemoryAttribute::DeviceShared; |
| 80 | 80 | ||
| 81 | ResultCode InitializeMemoryLayout(VAddr start, VAddr end); | 81 | ResultCode InitializeMemoryLayout(VAddr start, VAddr end); |
| 82 | ResultCode MapPages(VAddr addr, const PageLinkedList& page_linked_list, KMemoryPermission perm); | 82 | ResultCode MapPages(VAddr addr, const KPageLinkedList& page_linked_list, |
| 83 | void MapPhysicalMemory(PageLinkedList& page_linked_list, VAddr start, VAddr end); | 83 | KMemoryPermission perm); |
| 84 | void MapPhysicalMemory(KPageLinkedList& page_linked_list, VAddr start, VAddr end); | ||
| 84 | bool IsRegionMapped(VAddr address, u64 size); | 85 | bool IsRegionMapped(VAddr address, u64 size); |
| 85 | bool IsRegionContiguous(VAddr addr, u64 size) const; | 86 | bool IsRegionContiguous(VAddr addr, u64 size) const; |
| 86 | void AddRegionToPages(VAddr start, std::size_t num_pages, PageLinkedList& page_linked_list); | 87 | void AddRegionToPages(VAddr start, std::size_t num_pages, KPageLinkedList& page_linked_list); |
| 87 | KMemoryInfo QueryInfoImpl(VAddr addr); | 88 | KMemoryInfo QueryInfoImpl(VAddr addr); |
| 88 | VAddr AllocateVirtualMemory(VAddr start, std::size_t region_num_pages, u64 needed_num_pages, | 89 | VAddr AllocateVirtualMemory(VAddr start, std::size_t region_num_pages, u64 needed_num_pages, |
| 89 | std::size_t align); | 90 | std::size_t align); |
| 90 | ResultCode Operate(VAddr addr, std::size_t num_pages, const PageLinkedList& page_group, | 91 | ResultCode Operate(VAddr addr, std::size_t num_pages, const KPageLinkedList& page_group, |
| 91 | OperationType operation); | 92 | OperationType operation); |
| 92 | ResultCode Operate(VAddr addr, std::size_t num_pages, KMemoryPermission perm, | 93 | ResultCode Operate(VAddr addr, std::size_t num_pages, KMemoryPermission perm, |
| 93 | OperationType operation, PAddr map_addr = 0); | 94 | OperationType operation, PAddr map_addr = 0); |