Преглед изворни кода

CPU_Manager: Reconfigre guest threads for dynamrmic downsides

Fernando Sahmkow пре 6 година
родитељ
комит
3d9fbb8226

+ 2 - 1
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();
     }

+ 3 - 0
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();
 }
 

+ 2 - 0
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.