diff --git a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp index 3e5c5f4239..c8e0b87038 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp @@ -1169,12 +1169,16 @@ s32 cellGcmCallback(vm::ptr context, u32 count) { cellGcmSys->Log("cellGcmCallback(context_addr=0x%x, count=0x%x)", context.addr(), count); - GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); - if (1) { auto& ctrl = vm::get_ref(gcm_info.control_addr); be_t res = be_t::make(context->current - context->begin - ctrl.put.read_relaxed()); + + if (res != 0) + { + GSLockCurrent gslock(GS_LOCK_WAIT_FLUSH); + } + memmove(vm::get_ptr(context->begin), vm::get_ptr(context->current - res), res); context->current = context->begin + res;