diff options
Diffstat (limited to 'dev/kernel/HALKit')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc | 18 | ||||
| -rw-r--r-- | dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc | 4 |
2 files changed, 13 insertions, 9 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 diff --git a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc index 10f95e29..2d10fa89 100644 --- a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc +++ b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc @@ -10,10 +10,10 @@ namespace Kernel {
/***********************************************************************************/
/// @brief Unimplemented function (crashes by default)
-/// @param void
+/// @param process The process handle.
/***********************************************************************************/
-EXTERN_C Void __zka_pure_call(USER_PROCESS* process) {
+EXTERN_C Void __ne_pure_call(USER_PROCESS* process) {
if (process) process->Crash();
}
|
