diff --git a/kernel-src/sys/scheduler/queue.c b/kernel-src/sys/scheduler/queue.c index 51f39c39..20d8bf85 100644 --- a/kernel-src/sys/scheduler/queue.c +++ b/kernel-src/sys/scheduler/queue.c @@ -9,9 +9,9 @@ bitmap_t sched_idle_cpu_bitmap; spinlock_t sched_idle_cpu_bitmap_lock; static cpu_t *pick_cpu(thread_t *thread) { - // if there is only one cpu awake, thats the current one - if (arch_smp_cpusawake == 1) - return current_cpu(); + // if the system is still being bootstrapped or it is a single core machine, run it on the BSP + if (arch_smp_get_cpu_count() == 1 || unlikely(arch_smp_cpusawake != arch_smp_get_cpu_count())) + return get_bsp(); // if the thread targets a specific cpu, then go into that if (thread->cputarget)