summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-08-07 08:27:33 +0200
committerbunnei <bunneidev@gmail.com>2021-12-07 01:39:16 +0100
commit284015dfd7d0b963b9ad0d196ee283ef2287b812 (patch)
tree6a3bcb829075d98d63317242e5617dd7ea006958
parentcore: cpu_manager: Use KScopedDisableDispatch. (diff)
downloadyuzu-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
-rw-r--r--src/core/hle/kernel/k_scheduler.cpp23
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()) {