mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-12-06 07:12:28 +01:00
SPU: Exclude reservation_check address receptacle from writer_lock
This commit is contained in:
parent
ddecade935
commit
1250e428a7
|
|
@ -4842,7 +4842,7 @@ bool spu_thread::reservation_check(u32 addr, const decltype(rdata)& data) const
|
|||
|
||||
// Ensure data is allocated (HACK: would raise LR event if not)
|
||||
// Set range_lock first optimistically
|
||||
range_lock->store(u64{128} << 32 | addr);
|
||||
range_lock->store(u64{128} << 32 | addr | vm::range_readable);
|
||||
|
||||
u64 lock_val = *std::prev(std::end(vm::g_range_lock_set));
|
||||
u64 old_lock = 0;
|
||||
|
|
@ -4923,7 +4923,7 @@ bool spu_thread::reservation_check(u32 addr, u32 hash, atomic_t<u64, 64>* range_
|
|||
|
||||
// Ensure data is allocated (HACK: would raise LR event if not)
|
||||
// Set range_lock first optimistically
|
||||
range_lock->store(u64{128} << 32 | addr);
|
||||
range_lock->store(u64{128} << 32 | addr | vm::range_readable);
|
||||
|
||||
u64 lock_val = *std::prev(std::end(vm::g_range_lock_set));
|
||||
u64 old_lock = 0;
|
||||
|
|
|
|||
|
|
@ -547,6 +547,13 @@ namespace vm
|
|||
{
|
||||
to_clear = for_all_range_locks(to_clear & ~get_range_lock_bits(true), [&](u64 addr2, u32 size2)
|
||||
{
|
||||
constexpr u32 range_size_loc = vm::range_pos - 32;
|
||||
|
||||
if ((size2 >> range_size_loc) == (vm::range_readable >> vm::range_pos))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Split and check every 64K page separately
|
||||
for (u64 hi = addr2 >> 16, max = (addr2 + size2 - 1) >> 16; hi <= max; hi++)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue