From c7a185d4e7118e8e49515538d7ecfdc86ba2598f Mon Sep 17 00:00:00 2001 From: Eladash Date: Sat, 5 Sep 2020 19:04:41 +0300 Subject: [PATCH] SPU: Fix not acuiring reservation locks on DMA with more than one cache line (Accurate DMA) --- rpcs3/Emu/Cell/SPUThread.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 36ae647057..efc6850469 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1348,7 +1348,7 @@ void spu_thread::do_dma_transfer(const spu_mfc_cmd& args) if ((!g_use_rtm && !is_get) || g_cfg.core.spu_accurate_dma) [[unlikely]] { for (u32 size = args.size, size0; is_get; - size -= size0, dst += size0, src += size0) + size -= size0, dst += size0, src += size0, eal += size0) { size0 = std::min(128 - (eal & 127), std::min(size, 128)); @@ -1470,8 +1470,7 @@ void spu_thread::do_dma_transfer(const spu_mfc_cmd& args) { if (g_cfg.core.spu_accurate_dma) { - for (u32 size0;; - size -= size0, dst += size0, src += size0) + for (u32 size0;; size -= size0, dst += size0, src += size0, eal += size0) { size0 = std::min(128 - (eal & 127), std::min(size, 128));