diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index 6ea2b15f73..fa03987b18 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -1370,8 +1370,8 @@ void spu_thread::do_dma_transfer(const spu_mfc_cmd& args) { const u64 time0 = vm::reservation_acquire(eal, size0); - // Ignore DMA lock bits - if (time0 & (127 & ~vm::dma_lockb)) + // Ignore DMA lock bit on incomplete cache line accesses + if (time0 & (127 - (size0 != 128 ? vm::dma_lockb : 0))) { continue; } @@ -1422,7 +1422,7 @@ void spu_thread::do_dma_transfer(const spu_mfc_cmd& args) } } - if (time0 != vm::reservation_acquire(eal, size0)) + if (time0 != vm::reservation_acquire(eal, size0) || (size0 == 128 && !cmp_rdata(*reinterpret_cast(dst), *reinterpret_cast(src)))) { continue; }