Fix sys_spu_thread_group_resume

Do not remove suspend flag when SPU group state is not SPU_THREAD_GROUP_STATUS_RUNNING after operation!
This commit is contained in:
Eladash 2021-08-06 12:15:04 +03:00 committed by Ivan
parent bf61c826d5
commit 91737b11fe
2 changed files with 11 additions and 1 deletions

View file

@ -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) else if (group->run_state == SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED)
{ {
group->run_state = SPU_THREAD_GROUP_STATUS_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) for (auto& thread : group->threads)

View file

@ -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) else if (state == SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED)
{ {
state = SPU_THREAD_GROUP_STATUS_WAITING; state = SPU_THREAD_GROUP_STATUS_WAITING;
error = CellError{};
return true;
} }
else else
{ {
@ -971,7 +973,12 @@ error_code sys_spu_thread_group_resume(ppu_thread& ppu, u32 id)
if (error != CELL_CANCEL + 0u) if (error != CELL_CANCEL + 0u)
{ {
return error; if (error)
{
return error;
}
return CELL_OK;
} }
for (auto& thread : group->threads) for (auto& thread : group->threads)