From ebec24f9e0d7c5431ba1004e7aa4efcb0f093bc0 Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Tue, 15 Oct 2013 02:02:54 +0200 Subject: [PATCH] kernel: Add support for disabling CPUs in scheduler --- src/system/kernel/scheduler/scheduler_simple.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/scheduler/scheduler_simple.cpp b/src/system/kernel/scheduler/scheduler_simple.cpp index fc8fe9b9b4..e1c3474c69 100644 --- a/src/system/kernel/scheduler/scheduler_simple.cpp +++ b/src/system/kernel/scheduler/scheduler_simple.cpp @@ -282,7 +282,6 @@ simple_enqueue(Thread* thread, bool newOne) NotifySchedulerListeners(&SchedulerListener::ThreadEnqueuedInRunQueue, thread); - // TODO: disabled CPUs int32 thisCPU = smp_get_current_cpu(); int32 targetCPU = pinnedCPU; @@ -609,7 +608,18 @@ simple_reschedule(void) schedulerOldThreadData->lost_cpu = false; // select thread with the biggest priority - nextThread = simple_dequeue_thread(thisCPU); + if (oldThread->cpu->disabled) { + ASSERT(sCPURunQueues != NULL); + nextThread = sCPURunQueues[thisCPU].PeekMaximum(); + if (nextThread != NULL) + sCPURunQueues[thisCPU].Remove(nextThread); + else { + nextThread = sRunQueue->GetHead(B_IDLE_PRIORITY); + if (nextThread != NULL) + sRunQueue->Remove(nextThread); + } + } else + nextThread = simple_dequeue_thread(thisCPU); if (!nextThread) panic("reschedule(): run queues are empty!\n");