mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	core: hle: kernel: k_scheduler: Improve ScheduleImpl.
This commit is contained in:
		@@ -721,7 +721,7 @@ void KScheduler::SwitchContextStep2() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void KScheduler::ScheduleImpl() {
 | 
			
		||||
    KThread* previous_thread = current_thread.load();
 | 
			
		||||
    KThread* previous_thread = GetCurrentThread();
 | 
			
		||||
    KThread* next_thread = state.highest_priority_thread;
 | 
			
		||||
 | 
			
		||||
    state.needs_scheduling = false;
 | 
			
		||||
@@ -733,10 +733,15 @@ void KScheduler::ScheduleImpl() {
 | 
			
		||||
 | 
			
		||||
    // If we're not actually switching thread, there's nothing to do.
 | 
			
		||||
    if (next_thread == current_thread.load()) {
 | 
			
		||||
        previous_thread->EnableDispatch();
 | 
			
		||||
        guard.Unlock();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (next_thread->GetCurrentCore() != core_id) {
 | 
			
		||||
        next_thread->SetCurrentCore(core_id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    current_thread.store(next_thread);
 | 
			
		||||
 | 
			
		||||
    KProcess* const previous_process = system.Kernel().CurrentProcess();
 | 
			
		||||
@@ -747,11 +752,7 @@ void KScheduler::ScheduleImpl() {
 | 
			
		||||
    Unload(previous_thread);
 | 
			
		||||
 | 
			
		||||
    std::shared_ptr<Common::Fiber>* old_context;
 | 
			
		||||
    if (previous_thread != nullptr) {
 | 
			
		||||
        old_context = &previous_thread->GetHostContext();
 | 
			
		||||
    } else {
 | 
			
		||||
        old_context = &idle_thread->GetHostContext();
 | 
			
		||||
    }
 | 
			
		||||
    old_context = &previous_thread->GetHostContext();
 | 
			
		||||
    guard.Unlock();
 | 
			
		||||
 | 
			
		||||
    Common::Fiber::YieldTo(*old_context, *switch_fiber);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user