From a12d447bd65270cf447532b93263009cedd43970 Mon Sep 17 00:00:00 2001 From: Stephen Miller <56742918+StevenMiller123@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:21:14 -0500 Subject: [PATCH] sceKernelAllocateDirectMemory hotfixes (#2838) * Update memory.cpp * Clean logic FindDmemArea guarantees that the first dmem area we check contains search_start. Any dmem areas beyond the first one will be entirely past search_start, so checking against it in the loop is unnecessary. --- src/core/memory.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index cb80d6be4..494ffa70c 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -142,7 +142,7 @@ PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size, auto mapping_start = search_start > dmem_area->second.base ? Common::AlignUp(search_start, alignment) : Common::AlignUp(dmem_area->second.base, alignment); - auto mapping_end = Common::AlignUp(mapping_start + size, alignment); + auto mapping_end = mapping_start + size; // Find the first free, large enough dmem area in the range. while ((!dmem_area->second.is_free || dmem_area->second.GetEnd() < mapping_end) && @@ -151,10 +151,8 @@ PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size, dmem_area++; // Update local variables based on the new dmem_area - mapping_start = search_start > dmem_area->second.base - ? Common::AlignUp(search_start, alignment) - : Common::AlignUp(dmem_area->second.base, alignment); - mapping_end = Common::AlignUp(mapping_start + size, alignment); + mapping_start = Common::AlignUp(dmem_area->second.base, alignment); + mapping_end = mapping_start + size; } if (dmem_area == dmem_map.end()) {