diff options
author | bunnei <bunneidev@gmail.com> | 2021-08-07 08:16:12 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2021-08-07 21:18:47 +0200 |
commit | 77ad64b97d3d5d9d6f5189ad901e2cd98369c973 (patch) | |
tree | c4d4e6c9afabb53ee09dc2c46c65a7114c11ee4a | |
parent | core: hle: kernel: k_scheduler: Improve Unload. (diff) | |
download | yuzu-77ad64b97d3d5d9d6f5189ad901e2cd98369c973.tar yuzu-77ad64b97d3d5d9d6f5189ad901e2cd98369c973.tar.gz yuzu-77ad64b97d3d5d9d6f5189ad901e2cd98369c973.tar.bz2 yuzu-77ad64b97d3d5d9d6f5189ad901e2cd98369c973.tar.lz yuzu-77ad64b97d3d5d9d6f5189ad901e2cd98369c973.tar.xz yuzu-77ad64b97d3d5d9d6f5189ad901e2cd98369c973.tar.zst yuzu-77ad64b97d3d5d9d6f5189ad901e2cd98369c973.zip |
-rw-r--r-- | src/core/hle/kernel/k_scheduler.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/core/hle/kernel/k_scheduler.cpp b/src/core/hle/kernel/k_scheduler.cpp index 5ee4b8adc..e523c4923 100644 --- a/src/core/hle/kernel/k_scheduler.cpp +++ b/src/core/hle/kernel/k_scheduler.cpp @@ -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); |