diff options
| author | bunnei <bunneidev@gmail.com> | 2021-12-29 21:40:38 -0800 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2021-12-30 15:50:45 -0800 |
| commit | 3a89723d97b8e646cde569030057777813f4371c (patch) | |
| tree | c08f00b1ebb21c3652f0e23ab28fe06c4678aa42 /src/core/hle/kernel/global_scheduler_context.cpp | |
| parent | 5e5827190374946cc906da3a5d2aa586a9721ba0 (diff) | |
core: hle: kernel: Implement thread pinning.
- We largely had the mechanics in place for thread pinning, this change hooks these up.
- Validated with tests https://github.com/Atmosphere-NX/Atmosphere/blob/master/tests/TestSvc/source/test_thread_pinning.cpp.
Diffstat (limited to 'src/core/hle/kernel/global_scheduler_context.cpp')
| -rw-r--r-- | src/core/hle/kernel/global_scheduler_context.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/core/hle/kernel/global_scheduler_context.cpp b/src/core/hle/kernel/global_scheduler_context.cpp index 4f4e338e3..baad2c5d6 100644 --- a/src/core/hle/kernel/global_scheduler_context.cpp +++ b/src/core/hle/kernel/global_scheduler_context.cpp @@ -9,6 +9,7 @@ #include "core/hle/kernel/global_scheduler_context.h" #include "core/hle/kernel/k_scheduler.h" #include "core/hle/kernel/kernel.h" +#include "core/hle/kernel/physical_core.h" namespace Kernel { @@ -42,6 +43,11 @@ void GlobalSchedulerContext::PreemptThreads() { for (u32 core_id = 0; core_id < Core::Hardware::NUM_CPU_CORES; core_id++) { const u32 priority = preemption_priorities[core_id]; kernel.Scheduler(core_id).RotateScheduledQueue(core_id, priority); + + // Signal an interrupt occurred. For core 3, this is a certainty, as preemption will result + // in the rotator thread being scheduled. For cores 0-2, this is to simulate or system + // interrupts that may have occurred. + kernel.PhysicalCore(core_id).Interrupt(); } } |
