summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-01-10 23:40:15 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-01-10 23:40:15 +0100
commit5fedb726774eb46d2aed9378b13bc296baf89333 (patch)
tree7d8170999fa3db72fd7794110824b6e6d0299914 /dev/Kernel/src
parent6b63380f5f45891c5c27715cb290037d072ad212 (diff)
ADD: SMP tweaks on AMD64.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/src')
-rw-r--r--dev/Kernel/src/HardwareThreadScheduler.cc9
-rw-r--r--dev/Kernel/src/UserProcessScheduler.cc8
2 files changed, 10 insertions, 7 deletions
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<UIntPtr>(image_ptr);
+ fStack->SP = reinterpret_cast<UIntPtr>(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();
}
}