SPU: Fix race in PUTLLC with unchanged data

This commit is contained in:
Elad
2025-11-08 11:35:05 +02:00
parent b435deac9d
commit 8126a199f5
+2 -1
View File
@@ -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<spu_rdata_t>(addr)) && res.compare_and_swap_test(rtime, rtime + 128))
// For the comparison, load twice for atomicity
if (cmp_rdata(rdata, vm::_ref<spu_rdata_t>(addr)) && res == rtime && cmp_rdata(rdata, vm::_ref<spu_rdata_t>(addr)) && res.compare_and_swap_test(rtime, rtime + 128))
{
raddr = 0; // Disable notification
return true;