diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index e3e27900e5..2b91bad29c 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -465,8 +465,8 @@ bool Scheduler::pick_next() }); #ifdef SCHEDULER_RUNNABLE_DEBUG - dbg() << "Non-runnables:"; - Scheduler::for_each_nonrunnable([](Thread& thread) -> IterationDecision { + dbg() << "Scheduler[" << Processor::current().id() << "]: Non-runnables:"; + Scheduler::for_each_nonrunnable([&](Thread& thread) -> IterationDecision { if (thread.state() == Thread::Queued) dbg() << " " << String::format("%-12s", thread.state_string()) << " " << thread << " @ " << String::format("%w", thread.tss().cs) << ":" << String::format("%x", thread.tss().eip) << " Reason: " << (thread.wait_reason() ? thread.wait_reason() : "none"); else if (thread.state() == Thread::Dying) @@ -476,7 +476,7 @@ bool Scheduler::pick_next() return IterationDecision::Continue; }); - dbg() << "Runnables:"; + dbg() << "Scheduler[" << Processor::current().id() << "]: Runnables:"; Scheduler::for_each_runnable([](Thread& thread) -> IterationDecision { dbg() << " " << String::format("%3u", thread.effective_priority()) << "/" << String::format("%2u", thread.priority()) << " " << String::format("%-12s", thread.state_string()) << " " << thread << " @ " << String::format("%w", thread.tss().cs) << ":" << String::format("%x", thread.tss().eip); return IterationDecision::Continue; @@ -487,8 +487,11 @@ bool Scheduler::pick_next() Vector sorted_runnables; for_each_runnable([&](auto& thread) { - if ((thread.affinity() & (1u << Processor::current().id())) != 0) - sorted_runnables.append(&thread); + if ((thread.affinity() & (1u << Processor::current().id())) == 0) + return IterationDecision::Continue; + if (thread.state() == Thread::Running && &thread != current_thread) + return IterationDecision::Continue; + sorted_runnables.append(&thread); if (&thread == scheduler_data.m_pending_beneficiary) { thread_to_schedule = &thread; return IterationDecision::Break;