diff options
| author | 2022-01-14 23:20:30 -0800 | |
|---|---|---|
| committer | 2022-01-22 01:33:26 -0800 | |
| commit | 0137f2e6e11056db9c4ff5af6dc988e69823949e (patch) | |
| tree | acf43fca8dbaeee5d19c8fc7071d4c13771e6c09 /src | |
| parent | core: hle: kernel: Refactor Un/MapPhysicalMemory to remove unnecessary methods. (diff) | |
| download | yuzu-0137f2e6e11056db9c4ff5af6dc988e69823949e.tar.gz yuzu-0137f2e6e11056db9c4ff5af6dc988e69823949e.tar.xz yuzu-0137f2e6e11056db9c4ff5af6dc988e69823949e.zip | |
core: hle: kernel: KPageTable: SetHeapSize: Cleanup & take physical memory lock.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/k_page_table.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp index 5ec183b9e..04276ab32 100644 --- a/src/core/hle/kernel/k_page_table.cpp +++ b/src/core/hle/kernel/k_page_table.cpp | |||
| @@ -885,6 +885,9 @@ ResultCode KPageTable::SetMaxHeapSize(std::size_t size) { | |||
| 885 | } | 885 | } |
| 886 | 886 | ||
| 887 | ResultCode KPageTable::SetHeapSize(VAddr* out, std::size_t size) { | 887 | ResultCode KPageTable::SetHeapSize(VAddr* out, std::size_t size) { |
| 888 | // Lock the physical memory lock. | ||
| 889 | std::lock_guard phys_lk(map_physical_memory_lock); | ||
| 890 | |||
| 888 | // Try to perform a reduction in heap, instead of an extension. | 891 | // Try to perform a reduction in heap, instead of an extension. |
| 889 | VAddr cur_address{}; | 892 | VAddr cur_address{}; |
| 890 | std::size_t allocation_size{}; | 893 | std::size_t allocation_size{}; |
| @@ -1014,12 +1017,12 @@ ResultVal<VAddr> KPageTable::AllocateAndMapMemory(std::size_t needed_num_pages, | |||
| 1014 | } | 1017 | } |
| 1015 | 1018 | ||
| 1016 | if (is_map_only) { | 1019 | if (is_map_only) { |
| 1017 | CASCADE_CODE(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr)); | 1020 | R_TRY(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr)); |
| 1018 | } else { | 1021 | } else { |
| 1019 | KPageLinkedList page_group; | 1022 | KPageLinkedList page_group; |
| 1020 | CASCADE_CODE(system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, | 1023 | R_TRY(system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, memory_pool, |
| 1021 | memory_pool, allocation_option)); | 1024 | allocation_option)); |
| 1022 | CASCADE_CODE(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup)); | 1025 | R_TRY(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup)); |
| 1023 | } | 1026 | } |
| 1024 | 1027 | ||
| 1025 | block_manager->Update(addr, needed_num_pages, state, perm); | 1028 | block_manager->Update(addr, needed_num_pages, state, perm); |