summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-08-07 08:16:12 +0200
committerbunnei <bunneidev@gmail.com>2021-08-07 21:18:47 +0200
commit77ad64b97d3d5d9d6f5189ad901e2cd98369c973 (patch)
treec4d4e6c9afabb53ee09dc2c46c65a7114c11ee4a
parentcore: hle: kernel: k_scheduler: Improve Unload. (diff)
downloadyuzu-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.cpp13
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);