diff options
author | bunnei <bunneidev@gmail.com> | 2021-08-07 08:27:33 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2021-12-07 01:39:16 +0100 |
commit | 284015dfd7d0b963b9ad0d196ee283ef2287b812 (patch) | |
tree | 6a3bcb829075d98d63317242e5617dd7ea006958 /src/core/hle/kernel | |
parent | core: cpu_manager: Use KScopedDisableDispatch. (diff) | |
download | yuzu-284015dfd7d0b963b9ad0d196ee283ef2287b812.tar yuzu-284015dfd7d0b963b9ad0d196ee283ef2287b812.tar.gz yuzu-284015dfd7d0b963b9ad0d196ee283ef2287b812.tar.bz2 yuzu-284015dfd7d0b963b9ad0d196ee283ef2287b812.tar.lz yuzu-284015dfd7d0b963b9ad0d196ee283ef2287b812.tar.xz yuzu-284015dfd7d0b963b9ad0d196ee283ef2287b812.tar.zst yuzu-284015dfd7d0b963b9ad0d196ee283ef2287b812.zip |
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r-- | src/core/hle/kernel/k_scheduler.cpp | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/src/core/hle/kernel/k_scheduler.cpp b/src/core/hle/kernel/k_scheduler.cpp index f5236dfea..6ddbae52c 100644 --- a/src/core/hle/kernel/k_scheduler.cpp +++ b/src/core/hle/kernel/k_scheduler.cpp @@ -376,20 +376,18 @@ void KScheduler::ClearSchedulerUpdateNeeded(KernelCore& kernel) { } void KScheduler::DisableScheduling(KernelCore& kernel) { - if (auto* scheduler = kernel.CurrentScheduler(); scheduler) { - ASSERT(scheduler->GetCurrentThread()->GetDisableDispatchCount() >= 0); - scheduler->GetCurrentThread()->DisableDispatch(); - } + ASSERT(GetCurrentThreadPointer(kernel)->GetDisableDispatchCount() >= 0); + GetCurrentThreadPointer(kernel)->DisableDispatch(); } void KScheduler::EnableScheduling(KernelCore& kernel, u64 cores_needing_scheduling) { - if (auto* scheduler = kernel.CurrentScheduler(); scheduler) { - ASSERT(scheduler->GetCurrentThread()->GetDisableDispatchCount() >= 1); - if (scheduler->GetCurrentThread()->GetDisableDispatchCount() >= 1) { - scheduler->GetCurrentThread()->EnableDispatch(); - } + ASSERT(GetCurrentThreadPointer(kernel)->GetDisableDispatchCount() >= 1); + + if (GetCurrentThreadPointer(kernel)->GetDisableDispatchCount() > 1) { + GetCurrentThreadPointer(kernel)->EnableDispatch(); + } else { + RescheduleCores(kernel, cores_needing_scheduling); } - RescheduleCores(kernel, cores_needing_scheduling); } u64 KScheduler::UpdateHighestPriorityThreads(KernelCore& kernel) { @@ -646,6 +644,7 @@ void KScheduler::RescheduleCurrentCore() { if (phys_core.IsInterrupted()) { phys_core.ClearInterrupt(); } + guard.Lock(); if (state.needs_scheduling.load()) { Schedule(); @@ -662,10 +661,6 @@ void KScheduler::OnThreadStart() { void KScheduler::Unload(KThread* thread) { ASSERT(thread); - if (!thread) { - return; - } - LOG_TRACE(Kernel, "core {}, unload thread {}", core_id, thread ? thread->GetName() : "nullptr"); if (thread->IsCallingSvc()) { |