diff options
author | Lioncash <mathew1800@gmail.com> | 2019-03-24 21:30:45 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-03-24 22:08:30 +0100 |
commit | 1e92ba27855a40d928265debfdf2478248e40eaf (patch) | |
tree | 75d964749fc4374ed41fa6685d0ffff7b9c05ec4 /src/core/hle/kernel/vm_manager.cpp | |
parent | kernel/vm_manager: Rename HeapAllocate to SetHeapSize (diff) | |
download | yuzu-1e92ba27855a40d928265debfdf2478248e40eaf.tar yuzu-1e92ba27855a40d928265debfdf2478248e40eaf.tar.gz yuzu-1e92ba27855a40d928265debfdf2478248e40eaf.tar.bz2 yuzu-1e92ba27855a40d928265debfdf2478248e40eaf.tar.lz yuzu-1e92ba27855a40d928265debfdf2478248e40eaf.tar.xz yuzu-1e92ba27855a40d928265debfdf2478248e40eaf.tar.zst yuzu-1e92ba27855a40d928265debfdf2478248e40eaf.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index 523fe63e9..ec0a480ce 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp @@ -274,14 +274,23 @@ ResultVal<VAddr> VMManager::SetHeapSize(u64 size) { UnmapRange(heap_region_base, GetCurrentHeapSize()); } - // If necessary, expand backing vector to cover new heap extents. - if (size > GetCurrentHeapSize()) { - const u64 alloc_size = size - GetCurrentHeapSize(); + // If necessary, expand backing vector to cover new heap extents in + // the case of allocating. Otherwise, shrink the backing memory, + // if a smaller heap has been requested. + const u64 old_heap_size = GetCurrentHeapSize(); + if (size > old_heap_size) { + const u64 alloc_size = size - old_heap_size; heap_memory->insert(heap_memory->end(), alloc_size, 0); - heap_end = heap_region_base + size; + RefreshMemoryBlockMappings(heap_memory.get()); + } else if (size < old_heap_size) { + heap_memory->resize(size); + heap_memory->shrink_to_fit(); + RefreshMemoryBlockMappings(heap_memory.get()); } + + heap_end = heap_region_base + size; ASSERT(GetCurrentHeapSize() == heap_memory->size()); const auto mapping_result = @@ -293,23 +302,6 @@ ResultVal<VAddr> VMManager::SetHeapSize(u64 size) { return MakeResult<VAddr>(heap_region_base); } -ResultCode VMManager::HeapFree(VAddr target, u64 size) { - if (!IsWithinHeapRegion(target, size)) { - return ERR_INVALID_ADDRESS; - } - - if (size == 0) { - return RESULT_SUCCESS; - } - - const ResultCode result = UnmapRange(target, size); - if (result.IsError()) { - return result; - } - - return RESULT_SUCCESS; -} - MemoryInfo VMManager::QueryMemory(VAddr address) const { const auto vma = FindVMA(address); MemoryInfo memory_info{}; |