mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 15:31:26 +12:00
SPU: cpu_work() fixup, fix recursion in AV handler
This commit is contained in:
parent
5870da0b55
commit
e10c6cbaf7
3 changed files with 19 additions and 15 deletions
|
@ -1657,14 +1657,20 @@ void spu_thread::cpu_task()
|
|||
|
||||
void spu_thread::cpu_work()
|
||||
{
|
||||
if (std::exchange(in_cpu_work, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const auto timeout = +g_cfg.core.mfc_transfers_timeout;
|
||||
|
||||
// If either MFC size exceeds limit or timeout has been reached execute pending MFC commands
|
||||
if (mfc_size > g_cfg.core.mfc_transfers_shuffling || (timeout && get_system_time() - mfc_last_timestamp >= timeout))
|
||||
{
|
||||
do_mfc(false, false);
|
||||
check_mfc_interrupts(pc + 4);
|
||||
}
|
||||
|
||||
in_cpu_work = false;
|
||||
}
|
||||
|
||||
struct raw_spu_cleanup
|
||||
|
@ -3187,6 +3193,11 @@ bool spu_thread::process_mfc_cmd()
|
|||
// Process MFC commands
|
||||
do_mfc();
|
||||
|
||||
if (mfc_size < 16)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
auto old = state.add_fetch(cpu_flag::wait);
|
||||
|
||||
if (is_stopped(old))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue