diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 15 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 3 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc | 3 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelMain.cc | 11 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 1 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc | 1 | ||||
| -rw-r--r-- | dev/kernel/src/KernelProcessScheduler.cc | 14 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc (renamed from dev/kernel/src/ProcessScheduler.cc) | 6 |
8 files changed, 36 insertions, 18 deletions
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<Char*>(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 <FSKit/NeFS.h> #include <ArchKit/ArchKit.h> #include <HALKit/AMD64/Processor.h> @@ -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 <KernelKit/DeviceMgr.h> #include <KernelKit/DriveMgr.h> #include <KernelKit/ProcessScheduler.h> 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 <modules/ATA/ATA.h> #include <ArchKit/ArchKit.h> #include <KernelKit/DriveMgr.h> diff --git a/dev/kernel/src/KernelProcessScheduler.cc b/dev/kernel/src/KernelProcessScheduler.cc new file mode 100644 index 00000000..340adb39 --- /dev/null +++ b/dev/kernel/src/KernelProcessScheduler.cc @@ -0,0 +1,14 @@ +/* ------------------------------------------- + + Copyright (C) 2025, Amlal El Mahrouss, all rights reserved. + + FILE: UserProcessScheduler.cc + PURPOSE: Low level/Ring-3 Process scheduler. + +------------------------------------------- */ + +/***********************************************************************************/ +/// @file KernelProcessScheduler.cc +/// @brief Privileged/Ring-0 process scheduler. +/// @author Amlal El Mahrouss (amlal@nekernel.org) +/***********************************************************************************/ diff --git a/dev/kernel/src/ProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 2cd8dcd4..da8553ba 100644 --- a/dev/kernel/src/ProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -9,7 +9,7 @@ /***********************************************************************************/ /// @file UserProcessScheduler.cc -/// @brief User/Ring-3 process scheduler. +/// @brief Unprivileged/Ring-3 process scheduler. /// @author Amlal El Mahrouss (amlal@nekernel.org) /***********************************************************************************/ @@ -439,9 +439,9 @@ namespace Kernel if (mTeam.mProcessCount < 1) { - kout << "UserProcessScheduler::Run(): This team doesn't have any process!\r"; return 0UL; } + for (; process_index < mTeam.AsArray().Capacity(); ++process_index) { auto& process = mTeam.AsArray()[process_index]; @@ -454,8 +454,6 @@ namespace Kernel process.PTime = static_cast<Int32>(process.Affinity); - kout << "Switch to: '" << process.Name << "'.\r"; - // tell helper to find a core to schedule on. BOOL ret = UserProcessHelper::Switch(process.Image.fCode, &process.StackReserve[process.StackSize - 1], process.StackFrame, process.ProcessId); |
