From 5fedb726774eb46d2aed9378b13bc296baf89333 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 10 Jan 2025 23:40:15 +0100 Subject: ADD: SMP tweaks on AMD64. Signed-off-by: Amlal El Mahrouss --- dev/Kernel/src/HardwareThreadScheduler.cc | 9 ++++++--- dev/Kernel/src/UserProcessScheduler.cc | 8 ++++---- 2 files changed, 10 insertions(+), 7 deletions(-) (limited to 'dev/Kernel/src') diff --git a/dev/Kernel/src/HardwareThreadScheduler.cc b/dev/Kernel/src/HardwareThreadScheduler.cc index a94ad64c..0e9a2865 100644 --- a/dev/Kernel/src/HardwareThreadScheduler.cc +++ b/dev/Kernel/src/HardwareThreadScheduler.cc @@ -22,7 +22,7 @@ namespace Kernel /***********************************************************************************/ EXTERN Bool hal_check_stack(HAL::StackFramePtr frame_ptr); - EXTERN_C Bool mp_register_process(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame, ProcessID pid); + EXTERN_C Bool mp_register_process(HAL::StackFramePtr frame, ProcessID pid); STATIC HardwareThreadScheduler kHardwareThreadScheduler; @@ -109,12 +109,15 @@ namespace Kernel /// @retval true stack was changed, code is running. /// @retval false stack is invalid, previous code is running. /***********************************************************************************/ - Bool HardwareThread::Switch(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame, const ThreadID& pid) + Bool HardwareThread::Switch(VoidPtr image_ptr, Ptr8 stack_ptr, HAL::StackFramePtr frame, const ThreadID& pid) { this->fStack = frame; this->fSourcePID = pid; - Bool ret = mp_register_process(image, stack_ptr, fStack, this->fSourcePID); + fStack->BP = reinterpret_cast(image_ptr); + fStack->SP = reinterpret_cast(stack_ptr); + + Bool ret = mp_register_process(fStack, this->fSourcePID); if (ret) this->Busy(YES); diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index 2d3101f2..f21e90d9 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -330,7 +330,7 @@ namespace Kernel #endif // __ZKA_VIRTUAL_MEMORY_SUPPORT__ // React according to process kind. - switch (process.kind) + switch (process.Kind) { case UserThread::kExectuableDylibKind: { @@ -439,9 +439,9 @@ namespace Kernel for (; process_index < mTeam.AsArray().Capacity(); ++process_index) { - auto process = mTeam.AsArray()[process_index]; + auto& process = mTeam.AsArray()[process_index]; - //! check if process needs to be scheduled. + //! check if the process needs to be run. if (UserProcessHelper::CanBeScheduled(process)) { // Set current process header. @@ -455,7 +455,7 @@ namespace Kernel if (!UserProcessHelper::Switch(process.Image.fCode, &process.StackReserve[process.StackSize - 1], process.StackFrame, process.ProcessId)) { - kcout << "Invalid process.\r"; + kcout << "Invalid process (UH OH)\r"; process.Crash(); } } -- cgit v1.2.3