From e2b41947cde11c870d96970712dcfb3aa76eb0cf Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 1 Apr 2025 13:29:29 +0200 Subject: kernel/wip: SMP tweaks, and code cleanup. --- dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 15 ++++++++++++--- dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 3 --- dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc | 3 +++ dev/kernel/HALKit/AMD64/HalKernelMain.cc | 11 +++++------ dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 1 - dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc | 1 - 6 files changed, 20 insertions(+), 14 deletions(-) (limited to 'dev/kernel/HALKit') diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 10361d8e..c7e639e4 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -210,16 +210,25 @@ namespace Kernel::HAL if (kMADTBlock) { - SizeT index = 0; + SizeT index = 1; kSMPInterrupt = 0; kSMPCount = 0; + UInt32 eax, edx; kout << "SMP: Starting APs...\r"; - UInt32 eax, edx; kApicBaseAddress = kMADTBlock->Address; + constexpr auto kMemoryAPStart = 0x7C000; + Char* ptr_ap_code = reinterpret_cast(kMemoryAPStart); + + mm_map_page(ptr_ap_code, ptr_ap_code, kMMFlagsWr); + + SizeT hal_ap_blob_len = hal_ap_blob_end - hal_ap_blob_start; + + rt_copy_memory((Char*)hal_ap_blob_start, ptr_ap_code, hal_ap_blob_len); + while (Yes) { if (kMADTBlock->List[index].Type > 9 || @@ -244,7 +253,7 @@ namespace Kernel::HAL /// TODO: HAL helper to create an address. - hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)hal_ap_blob_start) >> 12)); + hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)ptr_ap_code) >> 12)); ++kSMPCount; break; diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc index 3c2939b6..7de5bb0b 100644 --- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc @@ -115,10 +115,7 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) auto process = Kernel::UserProcessScheduler::The().CurrentProcess(); if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) - { - kout << "Getting here.\r"; return; - } kIsScheduling = NO; diff --git a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc index d3ac8e7e..96276964 100644 --- a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc +++ b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc @@ -4,6 +4,7 @@ ------------------------------------------- */ +#include #include #include @@ -109,6 +110,8 @@ namespace Kernel::HAL hal_load_idt(idt); + NeFS::fs_init_nefs(); + Detail::hal_enable_pit(kPITTickForScheduler); rt_sti(); diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index f4dbc16e..0ebba546 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc @@ -94,7 +94,9 @@ EXTERN_C void hal_init_platform( EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept { - Kernel::NeFS::fs_init_nefs(); + kEndTim = hal_rdtsc_fn(); + + kout << "Boot Time: " << Kernel::number(kEndTim - kStartTim) << kendl; Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); @@ -106,12 +108,9 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept kEndTim = hal_rdtsc_fn(); - kout << "Cycles Spent Before Userland: " << Kernel::number(kEndTim - kStartTim) << kendl; + kout << "Init Time: " << Kernel::number(kEndTim - kStartTim) << kendl; idt_loader.Load(idt_reg); - while (YES) - { - continue; - } + dbg_break_point(); } diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc index 2a360e60..21d95b5d 100644 --- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc @@ -15,7 +15,6 @@ * */ -#include "NewKit/Defines.h" #include #include #include diff --git a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc index c6eee7f7..aa3b50c4 100644 --- a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc @@ -15,7 +15,6 @@ * */ -#include "NewKit/Defines.h" #include #include #include -- cgit v1.2.3