mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 02:12:09 -05:00
Kernel: Only consider scheduler Running threads if they're the current
There will be as many threads in Running state as there are CPUs. Only consider a thread in that state if it is the current thread already.
This commit is contained in:
parent
1e2e3eed62
commit
3ffdaabe10
1 changed files with 8 additions and 5 deletions
|
@ -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<Thread*, 128> 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;
|
||||
|
|
Loading…
Add table
Reference in a new issue