diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index 3a3f32ae6f..c524e17515 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -162,6 +162,17 @@ PPUThread* ppu_thread_create(u32 entry, u64 arg, s32 prio, u32 stacksize, bool i { PPUThread& new_thread = *(PPUThread*)&Emu.GetCPU().AddThread(CPU_THREAD_PPU); + // Note: (Syphurith) I haven't figured out the minimum stack size of PPU Thread. + // Maybe it can be done with pthread_attr_getstacksize function. + // And i toke 4096 (PTHREAD_STACK_MIN, and the smallest allocation unit) for this. + if ((stacksize % 4096) || (stacksize == 0)) { + // If not times of smallest allocation unit, round it up to the nearest one. + // And regard zero as a same condition. + sys_ppu_thread.Warning("sys_ppu_thread_create: stacksize increased from 0x%x to 0x%x.", + stacksize, 4096 * ((u32)(stacksize / 4096) + 1)); + stacksize = 4096 * ((u32)(stacksize / 4096) + 1); + } + u32 id = new_thread.GetId(); new_thread.SetEntry(entry); new_thread.SetPrio(prio);