mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-12 22:14:58 +00:00
SPU DMA: Fix PUTLLUC (TSX)
Prevent edge case of missing store.
This commit is contained in:
parent
f4f0fb88b1
commit
19acf260d8
@ -645,7 +645,10 @@ cpu_thread::suspend_all::suspend_all(cpu_thread* _this) noexcept
|
||||
|
||||
for_all_cpu([](cpu_thread* cpu)
|
||||
{
|
||||
cpu->state += cpu_flag::pause;
|
||||
if (!(cpu->state & cpu_flag::pause))
|
||||
{
|
||||
cpu->state += cpu_flag::pause;
|
||||
}
|
||||
});
|
||||
|
||||
busy_wait(500);
|
||||
|
@ -1600,6 +1600,23 @@ void spu_thread::do_putlluc(const spu_mfc_cmd& args)
|
||||
vm::reservation_acquire(addr, 128) += 64;
|
||||
}
|
||||
}
|
||||
else if (result == 0)
|
||||
{
|
||||
cpu_thread::suspend_all cpu_lock(this);
|
||||
|
||||
while (vm::reservation_acquire(addr, 128).bts(6))
|
||||
{
|
||||
busy_wait(100);
|
||||
}
|
||||
|
||||
while (vm::reservation_acquire(addr, 128) & 63)
|
||||
{
|
||||
busy_wait(100);
|
||||
}
|
||||
|
||||
mov_rdata(vm::_ref<decltype(rdata)>(addr), to_write);
|
||||
vm::reservation_acquire(addr, 128) += 64;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user