From 84812e60330406dba1151fe43d1d61ddeb498466 Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Mon, 21 Oct 2013 02:20:09 +0200 Subject: [PATCH] scheduler_affine: Correctly assign CPUs to idle threads --- src/system/kernel/scheduler/scheduler_affine.cpp | 5 ++--- src/system/kernel/thread.cpp | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/system/kernel/scheduler/scheduler_affine.cpp b/src/system/kernel/scheduler/scheduler_affine.cpp index 96aa692d21..9e03cb3531 100644 --- a/src/system/kernel/scheduler/scheduler_affine.cpp +++ b/src/system/kernel/scheduler/scheduler_affine.cpp @@ -614,9 +614,8 @@ affine_enqueue(Thread* thread, bool newOne) targetCore = sCPUToCore[targetCPU]; ASSERT(targetCore == schedulerThreadData->previous_core); } else if (schedulerThreadData->previous_core < 0) { - if (thread->priority == B_IDLE_PRIORITY) { - static int32 idleThreads = 0; - targetCPU = idleThreads++; + if (thread_is_idle_thread(thread)) { + targetCPU = thread->previous_cpu->cpu_num; targetCore = sCPUToCore[targetCPU]; } else { targetCore = affine_choose_core(); diff --git a/src/system/kernel/thread.cpp b/src/system/kernel/thread.cpp index 24ed01d800..4c4f142ed3 100644 --- a/src/system/kernel/thread.cpp +++ b/src/system/kernel/thread.cpp @@ -2720,6 +2720,7 @@ thread_init(kernel_args *args) } gCPU[i].running_thread = thread; + thread->previous_cpu = &gCPU[i]; thread->team = team_get_kernel_team(); thread->priority = B_IDLE_PRIORITY;