diff options
| author | Amlal <amlal@nekernel.org> | 2025-08-17 08:16:29 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-08-17 08:16:29 +0200 |
| commit | 0fdc3eeb3afed04f9ffd36b4b2760dac61d1b098 (patch) | |
| tree | 3e4887506ba7ce77fad55e59f7f643191d70cdf2 /dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc | |
| parent | ef8603be406c84f9bf8d777109d7c7a91e019139 (diff) | |
feat: kernel: (HALKit/KernelKit): Scheduler, and dylib improvements.
feat: ZXD: Define the ZXD format. TeX file for PEF and ZXD to be written soon.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc index 1dbce4ac..c8f53aa9 100644 --- a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc +++ b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc @@ -13,7 +13,7 @@ namespace Kernel { /// @param /***********************************************************************************/ -EXTERN_C Void __zka_pure_call(USER_PROCESS* process) { +EXTERN_C Void __ne_pure_call(USER_PROCESS* process) { if (process) process->Crash(); } @@ -25,23 +25,27 @@ EXTERN_C Void __zka_pure_call(USER_PROCESS* process) { EXTERN_C Bool hal_check_task(HAL::StackFramePtr stack_ptr) { if (!stack_ptr) return No; - return stack_ptr->SP != 0 && stack_ptr->IP != 0; + return stack_ptr->SP > 0 && stack_ptr->IP > 0; } /// @brief Wakes up thread. /// Wakes up thread from the hang state. Void mp_wakeup_thread(HAL::StackFrame* stack) { - NE_UNUSED(stack); + if (!hal_check_task(stack)) return; + + // RIP is always in R15. R15 is reserved for the RIP. + stack->IP = stack->R15; + Kernel::UserProcessHelper::StartScheduling(); } /// @brief makes the thread sleep on a loop. /// hooks and hangs thread to prevent code from executing. Void mp_hang_thread(HAL::StackFrame* stack) { - NE_UNUSED(stack); + if (!hal_check_task(stack)) return; - while (Yes) { - /* Nothing to do, code is spinning */ - } + // Store IP in R15 + stack->R15 = stack->IP; + stack->IP = 0UL; } } // namespace Kernel |
