summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/cpu_manager.cpp3
-rw-r--r--src/core/hle/kernel/physical_core.cpp3
-rw-r--r--src/core/hle/kernel/physical_core.h2
3 files changed, 7 insertions, 1 deletions
diff --git a/src/core/cpu_manager.cpp b/src/core/cpu_manager.cpp
index 6032cb0bf..241971ff3 100644
--- a/src/core/cpu_manager.cpp
+++ b/src/core/cpu_manager.cpp
@@ -80,9 +80,10 @@ void CpuManager::RunGuestThread() {
}
while (true) {
auto& physical_core = kernel.CurrentPhysicalCore();
- if (!physical_core.IsInterrupted()) {
+ while (!physical_core.IsInterrupted()) {
physical_core.Run();
}
+ physical_core.ClearExclusive();
auto& scheduler = physical_core.Scheduler();
scheduler.TryDoContextSwitch();
}
diff --git a/src/core/hle/kernel/physical_core.cpp b/src/core/hle/kernel/physical_core.cpp
index 69202540b..ff14fcb42 100644
--- a/src/core/hle/kernel/physical_core.cpp
+++ b/src/core/hle/kernel/physical_core.cpp
@@ -45,6 +45,9 @@ PhysicalCore::~PhysicalCore() = default;
void PhysicalCore::Run() {
arm_interface->Run();
+}
+
+void PhysicalCore::ClearExclusive() {
arm_interface->ClearExclusiveState();
}
diff --git a/src/core/hle/kernel/physical_core.h b/src/core/hle/kernel/physical_core.h
index c3da30b72..cd2e42fc3 100644
--- a/src/core/hle/kernel/physical_core.h
+++ b/src/core/hle/kernel/physical_core.h
@@ -38,6 +38,8 @@ public:
/// Execute current jit state
void Run();
+ /// Clear Exclusive state.
+ void ClearExclusive();
/// Set this core in IdleState.
void Idle();
/// Execute a single instruction in current jit.