From 3f7e6c990f39bff1fb159b79e85a42a0978ab700 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 26 Dec 2014 06:54:36 +0800 Subject: [PATCH] Not always flush in callback --- rpcs3/Emu/SysCalls/Modules/cellGcmSys.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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;