From 8126a199f529e2bcd0025815fb9cffd0fa9fb700 Mon Sep 17 00:00:00 2001 From: Elad <18193363+elad335@users.noreply.github.com> Date: Sat, 8 Nov 2025 11:35:05 +0200 Subject: [PATCH] SPU: Fix race in PUTLLC with unchanged data --- rpcs3/Emu/Cell/SPUThread.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index f8848a9781..d5ad515a1a 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -3844,7 +3844,8 @@ bool spu_thread::do_putllc(const spu_mfc_cmd& args) } // Writeback of unchanged data. Only check memory change - if (cmp_rdata(rdata, vm::_ref(addr)) && res.compare_and_swap_test(rtime, rtime + 128)) + // For the comparison, load twice for atomicity + if (cmp_rdata(rdata, vm::_ref(addr)) && res == rtime && cmp_rdata(rdata, vm::_ref(addr)) && res.compare_and_swap_test(rtime, rtime + 128)) { raddr = 0; // Disable notification return true;