summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2020-12-01 20:53:51 -0800
committerGravatar bunnei2020-12-06 00:03:24 -0800
commitc10a37e5b6bdece089fc765e9843f81a097b08a2 (patch)
treedb92b06d924582e4bf5be3083def36f0468fecc4 /src
parenthle: kernel: Port KAbstractSchedulerLock from Mesosphere. (diff)
downloadyuzu-c10a37e5b6bdece089fc765e9843f81a097b08a2.tar.gz
yuzu-c10a37e5b6bdece089fc765e9843f81a097b08a2.tar.xz
yuzu-c10a37e5b6bdece089fc765e9843f81a097b08a2.zip
hle: kernel: physical_core: Clear exclusive state after each run.
- This is closer to pre-multicore behavior, and works a bit better.
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp3
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp3
-rw-r--r--src/core/hle/kernel/physical_core.cpp1
3 files changed, 7 insertions, 0 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index 193fd7d62..e9c74b1a6 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -294,6 +294,9 @@ void ARM_Dynarmic_32::InvalidateCacheRange(VAddr addr, std::size_t size) {
294} 294}
295 295
296void ARM_Dynarmic_32::ClearExclusiveState() { 296void ARM_Dynarmic_32::ClearExclusiveState() {
297 if (!jit) {
298 return;
299 }
297 jit->ClearExclusiveState(); 300 jit->ClearExclusiveState();
298} 301}
299 302
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
index 0f0585d0f..b63f79915 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
@@ -330,6 +330,9 @@ void ARM_Dynarmic_64::InvalidateCacheRange(VAddr addr, std::size_t size) {
330} 330}
331 331
332void ARM_Dynarmic_64::ClearExclusiveState() { 332void ARM_Dynarmic_64::ClearExclusiveState() {
333 if (!jit) {
334 return;
335 }
333 jit->ClearExclusiveState(); 336 jit->ClearExclusiveState();
334} 337}
335 338
diff --git a/src/core/hle/kernel/physical_core.cpp b/src/core/hle/kernel/physical_core.cpp
index 50aca5752..d6a5742bd 100644
--- a/src/core/hle/kernel/physical_core.cpp
+++ b/src/core/hle/kernel/physical_core.cpp
@@ -37,6 +37,7 @@ void PhysicalCore::Initialize([[maybe_unused]] bool is_64_bit) {
37 37
38void PhysicalCore::Run() { 38void PhysicalCore::Run() {
39 arm_interface->Run(); 39 arm_interface->Run();
40 arm_interface->ClearExclusiveState();
40} 41}
41 42
42void PhysicalCore::Idle() { 43void PhysicalCore::Idle() {