summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-09-11 18:47:37 +0200
committerFernandoS27 <fsahmkow27@gmail.com>2019-10-15 17:55:16 +0200
commite05a8c2385a68be6b1f6079c656fa46336546927 (patch)
tree39a6d0c1955c580f7db66a53fc5777cdc885e4b7
parentScheduler: Implement Yield Count and Core migration on Thread Preemption. (diff)
downloadyuzu-e05a8c2385a68be6b1f6079c656fa46336546927.tar
yuzu-e05a8c2385a68be6b1f6079c656fa46336546927.tar.gz
yuzu-e05a8c2385a68be6b1f6079c656fa46336546927.tar.bz2
yuzu-e05a8c2385a68be6b1f6079c656fa46336546927.tar.lz
yuzu-e05a8c2385a68be6b1f6079c656fa46336546927.tar.xz
yuzu-e05a8c2385a68be6b1f6079c656fa46336546927.tar.zst
yuzu-e05a8c2385a68be6b1f6079c656fa46336546927.zip
-rw-r--r--src/core/hle/kernel/kernel.cpp8
-rw-r--r--src/core/hle/kernel/kernel.h6
-rw-r--r--src/core/hle/kernel/scheduler.cpp2
-rw-r--r--src/core/hle/kernel/wait_object.cpp3
4 files changed, 17 insertions, 2 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 7a913520d..77edbcd1f 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 f9f5bdc88..0fc4d1f36 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 5581c43bf..60d936c9a 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 a65ec7dbc..50ed2a2f1 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());
}
}