From ab60f290dcf732669dbfec2ae0fe4342457c8286 Mon Sep 17 00:00:00 2001 From: martin Date: Tue, 3 Sep 2024 18:47:50 -0400 Subject: [PATCH 1/2] fix header i hate c++ this is so stupid --- src/core/libraries/gnmdriver/gnmdriver.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/libraries/gnmdriver/gnmdriver.h b/src/core/libraries/gnmdriver/gnmdriver.h index 754d488f8..8bb0a582c 100644 --- a/src/core/libraries/gnmdriver/gnmdriver.h +++ b/src/core/libraries/gnmdriver/gnmdriver.h @@ -34,7 +34,7 @@ int PS4_SYSV_ABI sceGnmDebugHardwareStatus(); s32 PS4_SYSV_ABI sceGnmDeleteEqEvent(SceKernelEqueue eq, u64 id); int PS4_SYSV_ABI sceGnmDestroyWorkloadStream(); void PS4_SYSV_ABI sceGnmDingDong(u32 gnm_vqid, u32 next_offs_dw); -int PS4_SYSV_ABI sceGnmDingDongForWorkload(); +void PS4_SYSV_ABI sceGnmDingDongForWorkload(u32 gnm_vqid, u32 next_offs_dw); int PS4_SYSV_ABI sceGnmDisableMipStatsReport(); s32 PS4_SYSV_ABI sceGnmDispatchDirect(u32* cmdbuf, u32 size, u32 threads_x, u32 threads_y, u32 threads_z, u32 flags); From 5535e51f82e641cdf198100f460c4a37533336f8 Mon Sep 17 00:00:00 2001 From: martin Date: Tue, 3 Sep 2024 20:21:38 -0400 Subject: [PATCH 2/2] fix memory direct query i wish there were tests for this --- src/core/memory.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 640751477..752aadbb5 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -332,13 +332,17 @@ int MemoryManager::DirectMemoryQuery(PAddr addr, bool find_next, std::scoped_lock lk{mutex}; auto dmem_area = FindDmemArea(addr); - while (dmem_area != dmem_map.end() && dmem_area->second.is_free && find_next) { - dmem_area++; - } + if (addr >= dmem_area->second.base + dmem_area->second.size) { + if (!find_next) { + LOG_ERROR(Core, "Unable to find allocated direct memory region to query!"); + return ORBIS_KERNEL_ERROR_EACCES; + } - if (dmem_area == dmem_map.end() || dmem_area->second.is_free) { - LOG_ERROR(Core, "Unable to find allocated direct memory region to query!"); - return ORBIS_KERNEL_ERROR_EACCES; + dmem_area++; + if (dmem_area == dmem_map.end()) { + LOG_ERROR(Core, "Unable to find allocated direct memory region to query!"); + return ORBIS_KERNEL_ERROR_EACCES; + } } const auto& area = dmem_area->second;