diff --git a/kernel/include/kernel/Processor.h b/kernel/include/kernel/Processor.h index afb717a5..c63b34ec 100644 --- a/kernel/include/kernel/Processor.h +++ b/kernel/include/kernel/Processor.h @@ -57,8 +57,9 @@ namespace Kernel static ProcessorID current_id() { return read_gs_sized(offsetof(Processor, m_id)); } static ProcessorID id_from_index(size_t index); - static uint8_t count() { return s_processor_count; } - static bool is_smp_enabled() { return s_is_smp_enabled; } + static uint8_t count() { return s_processor_count; } + static bool is_smp_enabled() { return s_is_smp_enabled; } + static void set_smp_enabled() { s_is_smp_enabled = true; } static void wait_until_processors_ready(); static void toggle_should_print_cpu_load() { s_should_print_cpu_load = !s_should_print_cpu_load; } diff --git a/kernel/kernel/Processor.cpp b/kernel/kernel/Processor.cpp index 1a98a45f..3a83571c 100644 --- a/kernel/kernel/Processor.cpp +++ b/kernel/kernel/Processor.cpp @@ -189,8 +189,6 @@ namespace Kernel __builtin_ia32_pause(); } } - - s_is_smp_enabled = true; } void Processor::handle_ipi() diff --git a/kernel/kernel/Scheduler.cpp b/kernel/kernel/Scheduler.cpp index 1b165f65..d44b1483 100644 --- a/kernel/kernel/Scheduler.cpp +++ b/kernel/kernel/Scheduler.cpp @@ -136,6 +136,9 @@ namespace Kernel while (s_schedulers_initialized < Processor::count()) __builtin_ia32_pause(); + if (Processor::count() > 1) + Processor::set_smp_enabled(); + return {}; }