// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel #include #include #include using namespace Kernel; namespace Kernel { namespace Detail { STATIC void mp_hang_fn(void) { while (YES); } } // namespace Detail /// @brief wakes up thread. /// wakes up thread from hang. void mp_wakeup_thread(HAL::StackFramePtr stack) { if (!stack) return; hal_set_pc_to_hart(reinterpret_cast(stack->R15), reinterpret_cast(stack->IP)); } /// @brief makes thread sleep. /// hooks and hangs thread to prevent code from executing. void mp_hang_thread(HAL::StackFramePtr stack) { if (!stack) return; hal_set_pc_to_hart(reinterpret_cast(stack->R15), reinterpret_cast(Kernel::Detail::mp_hang_fn)); } } // namespace Kernel