forked from suyu/suyu
CpuCore: Clear exclusive state after doing a run in dynarmic.
This commit corrects an error in which a Core could remain with an exclusive state after running, leaving space for possible race conditions between changing cores.
This commit is contained in:
parent
2f79cc3ef5
commit
40cd4df584
2 changed files with 2 additions and 1 deletions
|
@ -96,6 +96,8 @@ void Cpu::RunLoop(bool tight_loop) {
|
||||||
} else {
|
} else {
|
||||||
arm_interface->Step();
|
arm_interface->Step();
|
||||||
}
|
}
|
||||||
|
// We are stopping a run, exclusive state must be cleared
|
||||||
|
arm_interface->ClearExclusiveState();
|
||||||
}
|
}
|
||||||
core_timing.Advance();
|
core_timing.Advance();
|
||||||
|
|
||||||
|
|
|
@ -458,7 +458,6 @@ void Scheduler::SwitchContext() {
|
||||||
cpu_core.LoadContext(new_thread->GetContext());
|
cpu_core.LoadContext(new_thread->GetContext());
|
||||||
cpu_core.SetTlsAddress(new_thread->GetTLSAddress());
|
cpu_core.SetTlsAddress(new_thread->GetTLSAddress());
|
||||||
cpu_core.SetTPIDR_EL0(new_thread->GetTPIDR_EL0());
|
cpu_core.SetTPIDR_EL0(new_thread->GetTPIDR_EL0());
|
||||||
cpu_core.ClearExclusiveState();
|
|
||||||
} else {
|
} else {
|
||||||
current_thread = nullptr;
|
current_thread = nullptr;
|
||||||
// Note: We do not reset the current process and current page table when idling because
|
// Note: We do not reset the current process and current page table when idling because
|
||||||
|
|
Loading…
Reference in a new issue