From e05a8c2385a68be6b1f6079c656fa46336546927 Mon Sep 17 00:00:00 2001
From: Fernando Sahmkow <fsahmkow27@gmail.com>
Date: Wed, 11 Sep 2019 12:47:37 -0400
Subject: [PATCH] Kernel: Remove global system accessor from WaitObject

---
 src/core/hle/kernel/kernel.cpp      | 8 ++++++++
 src/core/hle/kernel/kernel.h        | 6 ++++++
 src/core/hle/kernel/scheduler.cpp   | 2 +-
 src/core/hle/kernel/wait_object.cpp | 3 ++-
 4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 7a913520dc..77edbcd1f1 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -229,6 +229,14 @@ const Kernel::GlobalScheduler& KernelCore::GlobalScheduler() const {
     return impl->global_scheduler;
 }
 
+Core::System& KernelCore::System() {
+    return impl->system;
+}
+
+const Core::System& KernelCore::System() const {
+    return impl->system;
+}
+
 void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) {
     impl->named_ports.emplace(std::move(name), std::move(port));
 }
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index f9f5bdc88f..0fc4d1f363 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -82,6 +82,12 @@ public:
     /// Gets the sole instance of the global scheduler
     const Kernel::GlobalScheduler& GlobalScheduler() const;
 
+    /// Gets the sole instance of the system
+    Core::System& System();
+
+    /// Gets the sole instance of the system
+    const Core::System& System() const;
+
     /// Adds a port to the named port table
     void AddNamedPort(std::string name, SharedPtr<ClientPort> port);
 
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp
index 5581c43bf8..60d936c9ac 100644
--- a/src/core/hle/kernel/scheduler.cpp
+++ b/src/core/hle/kernel/scheduler.cpp
@@ -287,7 +287,7 @@ void GlobalScheduler::PreemptThreads() {
         if (current_thread != nullptr && current_thread->GetPriority() > priority) {
             for (auto& thread : suggested_queue[core_id]) {
                 const s32 source_core = thread->GetProcessorID();
-                if (thread->GetPriority() > priority) {
+                if (thread->GetPriority() < priority) {
                     continue;
                 }
                 if (source_core >= 0) {
diff --git a/src/core/hle/kernel/wait_object.cpp b/src/core/hle/kernel/wait_object.cpp
index a65ec7dbc3..50ed2a2f15 100644
--- a/src/core/hle/kernel/wait_object.cpp
+++ b/src/core/hle/kernel/wait_object.cpp
@@ -8,6 +8,7 @@
 #include "common/logging/log.h"
 #include "core/core.h"
 #include "core/core_cpu.h"
+#include "core/hle/kernel/kernel.h"
 #include "core/hle/kernel/object.h"
 #include "core/hle/kernel/process.h"
 #include "core/hle/kernel/thread.h"
@@ -97,7 +98,7 @@ void WaitObject::WakeupWaitingThread(SharedPtr<Thread> thread) {
     }
     if (resume) {
         thread->ResumeFromWait();
-        Core::System::GetInstance().PrepareReschedule(thread->GetProcessorID());
+        kernel.System().PrepareReschedule(thread->GetProcessorID());
     }
 }