diff options
| author | Zach Hilman <zachhilman@gmail.com> | 2018-12-03 21:22:09 -0500 | 
|---|---|---|
| committer | Zach Hilman <zachhilman@gmail.com> | 2018-12-03 21:22:09 -0500 | 
| commit | ddf5903cd9c05f1fecd8a5b8e8ad702b9b20eef8 (patch) | |
| tree | c5bf32930463f7e072689061f73b73e360924aad /src/core/hle | |
| parent | b5af41a07bebc0a378428e7d7ddc68c9c750d2d1 (diff) | |
scheduler: Avoid manual Reschedule call
This will automatically occur anyway when PrepareReschedule is called
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/scheduler.cpp | 18 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 4 | 
2 files changed, 11 insertions, 11 deletions
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp index c6b7d5232..df4d6cf0a 100644 --- a/src/core/hle/kernel/scheduler.cpp +++ b/src/core/hle/kernel/scheduler.cpp @@ -200,7 +200,6 @@ void Scheduler::YieldWithoutLoadBalancing(Thread* thread) {      // Yield this thread -- sleep for zero time and force reschedule to different thread      WaitCurrentThread_Sleep();      GetCurrentThread()->WakeAfterDelay(0); -    Reschedule();  }  void Scheduler::YieldWithLoadBalancing(Thread* thread) { @@ -223,24 +222,23 @@ void Scheduler::YieldWithLoadBalancing(Thread* thread) {      // Search through all of the cpu cores (except this one) for a suggested thread.      // Take the first non-nullptr one      for (unsigned cur_core = 0; cur_core < Core::NUM_CPU_CORES; ++cur_core) { -        if (cur_core == core) -            continue; -          const auto res =              Core::System::GetInstance().CpuCore(cur_core).Scheduler().GetNextSuggestedThread(                  core, priority); -        if (res != nullptr && -            (suggested_thread == nullptr || suggested_thread->GetPriority() > res->GetPriority())) { -            suggested_thread = res; + +        // If scheduler provides a suggested thread +        if (res != nullptr) { +            // And its better than the current suggested thread (or is the first valid one) +            if (suggested_thread == nullptr || +                suggested_thread->GetPriority() > res->GetPriority()) { +                suggested_thread = res; +            }          }      }      // If a suggested thread was found, queue that for this core      if (suggested_thread != nullptr)          suggested_thread->ChangeCore(core, suggested_thread->GetAffinityMask()); - -    // Perform actual yielding. -    Reschedule();  }  void Scheduler::YieldAndWaitForLoadBalancing(Thread* thread) { diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index fabdedd3d..29c2c2d03 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -994,7 +994,9 @@ static void SleepThread(s64 nanoseconds) {          GetCurrentThread()->WakeAfterDelay(nanoseconds);      } -    Core::System::GetInstance().PrepareReschedule(); +    // Reschedule all CPU cores +    for (std::size_t i = 0; i < 4; ++i) +        Core::System::GetInstance().CpuCore(i).PrepareReschedule();  }  /// Wait process wide key atomic  | 
