diff options
author | bunnei <bunneidev@gmail.com> | 2020-12-31 09:46:09 +0100 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2021-01-29 06:42:25 +0100 |
commit | eea346ba8eed49111d34e2fb1eee8a1ad53c4614 (patch) | |
tree | cbb3c011970c59e756dae5d358eadcb679b060e8 /src/core/hle/kernel/k_scheduler.cpp | |
parent | arm: arm_dynarmic: Skip calls when JIT is invalid. (diff) | |
download | yuzu-eea346ba8eed49111d34e2fb1eee8a1ad53c4614.tar yuzu-eea346ba8eed49111d34e2fb1eee8a1ad53c4614.tar.gz yuzu-eea346ba8eed49111d34e2fb1eee8a1ad53c4614.tar.bz2 yuzu-eea346ba8eed49111d34e2fb1eee8a1ad53c4614.tar.lz yuzu-eea346ba8eed49111d34e2fb1eee8a1ad53c4614.tar.xz yuzu-eea346ba8eed49111d34e2fb1eee8a1ad53c4614.tar.zst yuzu-eea346ba8eed49111d34e2fb1eee8a1ad53c4614.zip |
Diffstat (limited to 'src/core/hle/kernel/k_scheduler.cpp')
-rw-r--r-- | src/core/hle/kernel/k_scheduler.cpp | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/src/core/hle/kernel/k_scheduler.cpp b/src/core/hle/kernel/k_scheduler.cpp index 0f7a541c8..edc5df733 100644 --- a/src/core/hle/kernel/k_scheduler.cpp +++ b/src/core/hle/kernel/k_scheduler.cpp @@ -627,11 +627,11 @@ void KScheduler::OnThreadStart() { void KScheduler::Unload(KThread* thread) { if (thread) { thread->SetIsRunning(false); - if (thread->IsContinuousOnSVC() && !thread->IsHLEThread()) { + if (thread->IsContinuousOnSVC()) { system.ArmInterface(core_id).ExceptionalExit(); thread->SetContinuousOnSVC(false); } - if (!thread->IsHLEThread() && !thread->HasExited()) { + if (!thread->HasExited()) { Core::ARM_Interface& cpu_core = system.ArmInterface(core_id); cpu_core.SaveContext(thread->GetContext32()); cpu_core.SaveContext(thread->GetContext64()); @@ -655,14 +655,13 @@ void KScheduler::Reload(KThread* thread) { if (thread_owner_process != nullptr) { system.Kernel().MakeCurrentProcess(thread_owner_process); } - if (!thread->IsHLEThread()) { - Core::ARM_Interface& cpu_core = system.ArmInterface(core_id); - cpu_core.LoadContext(thread->GetContext32()); - cpu_core.LoadContext(thread->GetContext64()); - cpu_core.SetTlsAddress(thread->GetTLSAddress()); - cpu_core.SetTPIDR_EL0(thread->GetTPIDR_EL0()); - cpu_core.ClearExclusiveState(); - } + + Core::ARM_Interface& cpu_core = system.ArmInterface(core_id); + cpu_core.LoadContext(thread->GetContext32()); + cpu_core.LoadContext(thread->GetContext64()); + cpu_core.SetTlsAddress(thread->GetTLSAddress()); + cpu_core.SetTPIDR_EL0(thread->GetTPIDR_EL0()); + cpu_core.ClearExclusiveState(); } } @@ -722,7 +721,7 @@ void KScheduler::SwitchToCurrent() { return state.needs_scheduling.load(std::memory_order_relaxed); }; do { - if (current_thread != nullptr && !current_thread->IsHLEThread()) { + if (current_thread != nullptr) { current_thread->context_guard.lock(); if (current_thread->GetRawState() != ThreadState::Runnable) { current_thread->context_guard.unlock(); @@ -764,9 +763,9 @@ void KScheduler::Initialize() { std::string name = "Idle Thread Id:" + std::to_string(core_id); std::function<void(void*)> init_func = Core::CpuManager::GetIdleThreadStartFunc(); void* init_func_parameter = system.GetCpuManager().GetStartFuncParamater(); - ThreadType type = static_cast<ThreadType>(THREADTYPE_KERNEL | THREADTYPE_HLE | THREADTYPE_IDLE); - auto thread_res = KThread::Create(system, type, name, 0, 64, 0, static_cast<u32>(core_id), 0, - nullptr, std::move(init_func), init_func_parameter); + auto thread_res = KThread::Create(system, THREADTYPE_KERNEL, name, 0, THREADPRIO_LOWEST, 0, + static_cast<u32>(core_id), 0, nullptr, std::move(init_func), + init_func_parameter); idle_thread = thread_res.Unwrap().get(); { |