core: cpu_manager: Fix a typo in PreemptSingleCore, which broke many games.
- We were reload'ing the old current scheduler, which may have changed.
This commit is contained in:
		
							parent
							
								
									9b492430bb
								
							
						
					
					
						commit
						d4ae0ae0e9
					
				| @ -254,8 +254,8 @@ void CpuManager::SingleCoreRunSuspendThread() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void CpuManager::PreemptSingleCore(bool from_running_enviroment) { | void CpuManager::PreemptSingleCore(bool from_running_enviroment) { | ||||||
|     std::size_t old_core = current_core; |     { | ||||||
|     auto& scheduler = system.Kernel().Scheduler(old_core); |         auto& scheduler = system.Kernel().Scheduler(current_core); | ||||||
|         Kernel::Thread* current_thread = scheduler.GetCurrentThread(); |         Kernel::Thread* current_thread = scheduler.GetCurrentThread(); | ||||||
|         if (idle_count >= 4 || from_running_enviroment) { |         if (idle_count >= 4 || from_running_enviroment) { | ||||||
|             if (!from_running_enviroment) { |             if (!from_running_enviroment) { | ||||||
| @ -269,16 +269,21 @@ void CpuManager::PreemptSingleCore(bool from_running_enviroment) { | |||||||
|         current_core.store((current_core + 1) % Core::Hardware::NUM_CPU_CORES); |         current_core.store((current_core + 1) % Core::Hardware::NUM_CPU_CORES); | ||||||
|         system.CoreTiming().ResetTicks(); |         system.CoreTiming().ResetTicks(); | ||||||
|         scheduler.Unload(scheduler.GetCurrentThread()); |         scheduler.Unload(scheduler.GetCurrentThread()); | ||||||
|  | 
 | ||||||
|         auto& next_scheduler = system.Kernel().Scheduler(current_core); |         auto& next_scheduler = system.Kernel().Scheduler(current_core); | ||||||
|         Common::Fiber::YieldTo(current_thread->GetHostContext(), next_scheduler.ControlContext()); |         Common::Fiber::YieldTo(current_thread->GetHostContext(), next_scheduler.ControlContext()); | ||||||
|     /// May have changed scheduler
 |     } | ||||||
|     auto& current_scheduler = system.Kernel().Scheduler(current_core); | 
 | ||||||
|     current_scheduler.Reload(scheduler.GetCurrentThread()); |     // May have changed scheduler
 | ||||||
|     auto* currrent_thread2 = current_scheduler.GetCurrentThread(); |     { | ||||||
|  |         auto& scheduler = system.Kernel().Scheduler(current_core); | ||||||
|  |         scheduler.Reload(scheduler.GetCurrentThread()); | ||||||
|  |         auto* currrent_thread2 = scheduler.GetCurrentThread(); | ||||||
|         if (!currrent_thread2->IsIdleThread()) { |         if (!currrent_thread2->IsIdleThread()) { | ||||||
|             idle_count = 0; |             idle_count = 0; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| void CpuManager::SingleCorePause(bool paused) { | void CpuManager::SingleCorePause(bool paused) { | ||||||
|     if (!paused) { |     if (!paused) { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei