summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2020-02-26 15:44:21 +0100
committerFernando Sahmkow <fsahmkow27@gmail.com>2020-06-27 17:35:15 +0200
commit3d9fbb8226e9bf7dce99568f6e616e7361d43c41 (patch)
treebce92b63c7c038c4eda6f6118b8b39aa92a09efb /src
parentSVC: Correct SendSyncRequest. (diff)
downloadyuzu-3d9fbb8226e9bf7dce99568f6e616e7361d43c41.tar
yuzu-3d9fbb8226e9bf7dce99568f6e616e7361d43c41.tar.gz
yuzu-3d9fbb8226e9bf7dce99568f6e616e7361d43c41.tar.bz2
yuzu-3d9fbb8226e9bf7dce99568f6e616e7361d43c41.tar.lz
yuzu-3d9fbb8226e9bf7dce99568f6e616e7361d43c41.tar.xz
yuzu-3d9fbb8226e9bf7dce99568f6e616e7361d43c41.tar.zst
yuzu-3d9fbb8226e9bf7dce99568f6e616e7361d43c41.zip
Diffstat (limited to 'src')
-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.