diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 1c181c5877..3d14d5de5a 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -4278,6 +4278,9 @@ extern void resume_spu_thread_group_from_waiting(spu_thread& spu) else if (group->run_state == SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED) { group->run_state = SPU_THREAD_GROUP_STATUS_SUSPENDED; + spu.state += cpu_flag::signal; + spu.state.notify_one(cpu_flag::signal); + return; } for (auto& thread : group->threads) diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.cpp b/rpcs3/Emu/Cell/lv2/sys_spu.cpp index 9b5c33b094..7f9d7392f3 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_spu.cpp @@ -958,6 +958,8 @@ error_code sys_spu_thread_group_resume(ppu_thread& ppu, u32 id) else if (state == SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED) { state = SPU_THREAD_GROUP_STATUS_WAITING; + error = CellError{}; + return true; } else { @@ -971,7 +973,12 @@ error_code sys_spu_thread_group_resume(ppu_thread& ppu, u32 id) if (error != CELL_CANCEL + 0u) { - return error; + if (error) + { + return error; + } + + return CELL_OK; } for (auto& thread : group->threads)