From a8e9591bac422b2b0e2fc92b598f55fde3a110c8 Mon Sep 17 00:00:00 2001 From: konrad Date: Sun, 8 Jan 2023 04:36:28 +0100 Subject: [PATCH] Kernel: Split Aarch64 CPU setup into two stages Former aims to bring the processor itself into desired state, while latter allows for additional initialization with heap available. --- Kernel/Arch/aarch64/Processor.cpp | 6 +++++- Kernel/Arch/aarch64/Processor.h | 3 ++- Kernel/Arch/aarch64/init.cpp | 4 +++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Kernel/Arch/aarch64/Processor.cpp b/Kernel/Arch/aarch64/Processor.cpp index 1951611270..c4f960aed1 100644 --- a/Kernel/Arch/aarch64/Processor.cpp +++ b/Kernel/Arch/aarch64/Processor.cpp @@ -27,7 +27,7 @@ extern "C" void enter_thread_context(Thread* from_thread, Thread* to_thread) __a Processor* g_current_processor; -void Processor::initialize(u32 cpu) +void Processor::install(u32 cpu) { VERIFY(g_current_processor == nullptr); m_features = detect_cpu_features(); @@ -37,6 +37,10 @@ void Processor::initialize(u32 cpu) g_current_processor = this; } +void Processor::initialize() +{ +} + [[noreturn]] void Processor::halt() { disable_interrupts(); diff --git a/Kernel/Arch/aarch64/Processor.h b/Kernel/Arch/aarch64/Processor.h index b06b3714db..bd71bb138f 100644 --- a/Kernel/Arch/aarch64/Processor.h +++ b/Kernel/Arch/aarch64/Processor.h @@ -44,7 +44,8 @@ class Processor { public: Processor() = default; - void initialize(u32 cpu); + void install(u32 cpu); + void initialize(); template T* get_specific() diff --git a/Kernel/Arch/aarch64/init.cpp b/Kernel/Arch/aarch64/init.cpp index 5c9535c698..56ece0bdc8 100644 --- a/Kernel/Arch/aarch64/init.cpp +++ b/Kernel/Arch/aarch64/init.cpp @@ -147,7 +147,7 @@ extern "C" [[noreturn]] void init() CommandLine::early_initialize(""); new (&bootstrap_processor()) Processor(); - bootstrap_processor().initialize(0); + bootstrap_processor().install(0); // We want to enable the MMU as fast as possible to make the boot faster. init_page_tables(); @@ -159,6 +159,8 @@ extern "C" [[noreturn]] void init() (*ctor)(); kmalloc_init(); + bootstrap_processor().initialize(); + load_kernel_symbol_table(); CommandLine::initialize();