TSX/PPU: fix conditional store regression

This commit is contained in:
Nekotekina 2021-12-17 21:48:01 +03:00
parent 18f59d3be8
commit 3e1e1a683c
2 changed files with 3 additions and 4 deletions

View file

@ -2339,7 +2339,7 @@ static bool ppu_store_reservation(ppu_thread& ppu, u32 addr, u64 reg_value)
// Aligned 8-byte reservations will be used here // Aligned 8-byte reservations will be used here
addr &= -8; addr &= -8;
const u64 lock_bits = g_cfg.core.spu_accurate_dma ? vm::rsrv_unique_lock : 1; const u64 lock_bits = vm::rsrv_unique_lock;
auto [_oldd, _ok] = res.fetch_op([&](u64& r) auto [_oldd, _ok] = res.fetch_op([&](u64& r)
{ {
@ -2348,7 +2348,6 @@ static bool ppu_store_reservation(ppu_thread& ppu, u32 addr, u64 reg_value)
return false; return false;
} }
// Despite using shared lock, doesn't allow other shared locks (TODO)
r += lock_bits; r += lock_bits;
return true; return true;
}); });

View file

@ -1705,7 +1705,7 @@ void spu_thread::cpu_work()
gen_interrupt = check_mfc_interrupts(pc); gen_interrupt = check_mfc_interrupts(pc);
work_left |= interrupts_enabled; work_left |= interrupts_enabled;
} }
in_cpu_work = false; in_cpu_work = false;
if (!work_left) if (!work_left)
@ -4575,7 +4575,7 @@ bool spu_thread::stop_and_signal(u32 code)
spu_function_logger logger(*this, "sys_spu_thread_receive_event"); spu_function_logger logger(*this, "sys_spu_thread_receive_event");
std::shared_ptr<lv2_event_queue> queue; std::shared_ptr<lv2_event_queue> queue;
while (true) while (true)
{ {
// Check group status, wait if necessary // Check group status, wait if necessary