mirror of
https://github.com/RPCS3/rpcs3.git
synced 2026-05-07 13:37:46 +00:00
Some reverting
This commit is contained in:
parent
d2fc690ad2
commit
51278f108c
3 changed files with 26 additions and 40 deletions
|
|
@ -26,8 +26,8 @@ void spu_recompiler_base::enter(SPUThread& spu)
|
|||
// Search if cached data matches
|
||||
auto func_ptr = spu.compiled_cache[spu.pc / 4];
|
||||
|
||||
// func.contents is there only as a temporary test, to see if SPU code not getting invalidated is the reason for the crashes
|
||||
if (func_ptr && func_ptr->dirty_bit)
|
||||
// Dirty bit check commented out until another code invalidation is found - SYNC, SYNCC, DSYNC and DMAs aren't covering everything
|
||||
if (func_ptr/* && func_ptr->dirty_bit*/)
|
||||
{
|
||||
auto & func = *func_ptr;
|
||||
func.dirty_bit = false;
|
||||
|
|
|
|||
|
|
@ -688,31 +688,33 @@ void SPUThread::process_mfc_cmd()
|
|||
bool result = false;
|
||||
|
||||
// Check for fast exit in the beginning as well
|
||||
vm::writer_lock lock(vm::try_to_lock);
|
||||
|
||||
if (lock.locked || memcmp(rdata.data(), data.data(), rdata.size() * sizeof(rdata[0])) == 0) {
|
||||
if (raddr == ch_mfc_cmd.eal && rtime == vm::reservation_acquire(raddr, 128))
|
||||
if (raddr == ch_mfc_cmd.eal && rtime == vm::reservation_acquire(raddr, 128) && rdata == data)
|
||||
{
|
||||
// TODO: vm::check_addr
|
||||
if (s_use_rtm && utils::transaction_enter())
|
||||
{
|
||||
// TODO: vm::check_addr
|
||||
if (s_use_rtm && utils::transaction_enter())
|
||||
if (!vm::reader_lock{ vm::try_to_lock })
|
||||
{
|
||||
if (!lock.locked && !vm::reader_lock{ vm::try_to_lock })
|
||||
{
|
||||
_xabort(0);
|
||||
}
|
||||
|
||||
if (rtime == vm::reservation_acquire(raddr, 128) && rdata == data)
|
||||
{
|
||||
data = to_write;
|
||||
result = true;
|
||||
|
||||
vm::reservation_update(raddr, 128);
|
||||
vm::notify(raddr, 128);
|
||||
}
|
||||
|
||||
_xend();
|
||||
_xabort(0);
|
||||
}
|
||||
else if (lock.locked)
|
||||
|
||||
if (rtime == vm::reservation_acquire(raddr, 128) && rdata == data)
|
||||
{
|
||||
data = to_write;
|
||||
result = true;
|
||||
|
||||
vm::reservation_update(raddr, 128);
|
||||
vm::notify(raddr, 128);
|
||||
}
|
||||
|
||||
_xend();
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO maybe timeout and check if the lock is still needed in long waits (If rtime changes, no use)
|
||||
vm::writer_lock lock;
|
||||
|
||||
if (rtime == vm::reservation_acquire(raddr, 128))
|
||||
{
|
||||
data = to_write;
|
||||
vm::reservation_update(raddr, 128);
|
||||
|
|
@ -721,21 +723,6 @@ void SPUThread::process_mfc_cmd()
|
|||
result = true;
|
||||
vm::notify(raddr, 128);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO maybe timeout and check if the lock is still needed in long waits (If rtime changes, no use)
|
||||
vm::writer_lock lock(0);
|
||||
|
||||
if (rtime == vm::reservation_acquire(raddr, 128))
|
||||
{
|
||||
data = to_write;
|
||||
vm::reservation_update(raddr, 128);
|
||||
lock.unlock();
|
||||
|
||||
result = true;
|
||||
vm::notify(raddr, 128);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ namespace vm
|
|||
{
|
||||
named_thread* owner;
|
||||
u32 addr;
|
||||
bool inserted = false;
|
||||
u64 stamp;
|
||||
const void* data;
|
||||
static const u32 size = 128; // Always 128 currently
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue