summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/arm_interface.h10
-rw-r--r--src/core/hle/kernel/scheduler.cpp10
2 files changed, 3 insertions, 17 deletions
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h
index be9f3703a..87a1c29cc 100644
--- a/src/core/arm/arm_interface.h
+++ b/src/core/arm/arm_interface.h
@@ -6,7 +6,6 @@
#include <array>
#include <vector>
-#include <mutex>
#include "common/common_types.h"
namespace Common {
@@ -165,14 +164,6 @@ public:
std::string name;
};
- void Lock() {
- guard.lock();
- }
-
- void Unlock() {
- guard.unlock();
- }
-
std::vector<BacktraceEntry> GetBacktrace() const;
/// fp (= r29) points to the last frame record.
@@ -187,7 +178,6 @@ protected:
/// System context that this ARM interface is running under.
System& system;
CPUInterruptHandler& interrupt_handler;
- std::mutex guard;
};
} // namespace Core
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp
index a37b992ec..affc2fbed 100644
--- a/src/core/hle/kernel/scheduler.cpp
+++ b/src/core/hle/kernel/scheduler.cpp
@@ -463,9 +463,7 @@ void GlobalScheduler::AdjustSchedulingOnPriority(Thread* thread, u32 old_priorit
}
if (thread->processor_id >= 0) {
- // TODO(Blinkhawk): compare it with current thread running on current core, instead of
- // checking running
- if (thread->IsRunning()) {
+ if (thread == kernel.CurrentScheduler().GetCurrentThread()) {
SchedulePrepend(thread->current_priority, static_cast<u32>(thread->processor_id),
thread);
} else {
@@ -602,8 +600,6 @@ void Scheduler::SwitchContextStep2() {
previous_thread != nullptr ? previous_thread->GetOwnerProcess() : nullptr;
if (new_thread) {
- auto& cpu_core = system.ArmInterface(core_id);
- cpu_core.Lock();
ASSERT_MSG(new_thread->GetSchedulingStatus() == ThreadSchedStatus::Runnable,
"Thread must be runnable.");
@@ -615,6 +611,7 @@ void Scheduler::SwitchContextStep2() {
system.Kernel().MakeCurrentProcess(thread_owner_process);
}
if (!new_thread->IsHLEThread()) {
+ auto& cpu_core = system.ArmInterface(core_id);
cpu_core.LoadContext(new_thread->GetContext32());
cpu_core.LoadContext(new_thread->GetContext64());
cpu_core.SetTlsAddress(new_thread->GetTLSAddress());
@@ -646,8 +643,8 @@ void Scheduler::SwitchContext() {
// Save context for previous thread
if (previous_thread) {
- auto& cpu_core = system.ArmInterface(core_id);
if (!previous_thread->IsHLEThread()) {
+ auto& cpu_core = system.ArmInterface(core_id);
cpu_core.SaveContext(previous_thread->GetContext32());
cpu_core.SaveContext(previous_thread->GetContext64());
// Save the TPIDR_EL0 system register in case it was modified.
@@ -659,7 +656,6 @@ void Scheduler::SwitchContext() {
}
previous_thread->SetIsRunning(false);
previous_thread->context_guard.unlock();
- cpu_core.Unlock();
}
std::shared_ptr<Common::Fiber> old_context;