summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_scheduler.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-12-31 09:46:09 +0100
committerbunnei <bunneidev@gmail.com>2021-01-29 06:42:25 +0100
commiteea346ba8eed49111d34e2fb1eee8a1ad53c4614 (patch)
treecbb3c011970c59e756dae5d358eadcb679b060e8 /src/core/hle/kernel/k_scheduler.cpp
parentarm: arm_dynarmic: Skip calls when JIT is invalid. (diff)
downloadyuzu-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 '')
-rw-r--r--src/core/hle/kernel/k_scheduler.cpp27
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();
{