diff options
| author | 2020-12-01 20:53:51 -0800 | |
|---|---|---|
| committer | 2020-12-06 00:03:24 -0800 | |
| commit | c10a37e5b6bdece089fc765e9843f81a097b08a2 (patch) | |
| tree | db92b06d924582e4bf5be3083def36f0468fecc4 /src | |
| parent | hle: kernel: Port KAbstractSchedulerLock from Mesosphere. (diff) | |
| download | yuzu-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.cpp | 3 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/kernel/physical_core.cpp | 1 |
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 | ||
| 296 | void ARM_Dynarmic_32::ClearExclusiveState() { | 296 | void 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 | ||
| 332 | void ARM_Dynarmic_64::ClearExclusiveState() { | 332 | void 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 | ||
| 38 | void PhysicalCore::Run() { | 38 | void PhysicalCore::Run() { |
| 39 | arm_interface->Run(); | 39 | arm_interface->Run(); |
| 40 | arm_interface->ClearExclusiveState(); | ||
| 40 | } | 41 | } |
| 41 | 42 | ||
| 42 | void PhysicalCore::Idle() { | 43 | void PhysicalCore::Idle() { |