diff --git a/kernel/include/kernel/Scheduler.h b/kernel/include/kernel/Scheduler.h index 66171e88..07bbef9b 100644 --- a/kernel/include/kernel/Scheduler.h +++ b/kernel/include/kernel/Scheduler.h @@ -14,7 +14,9 @@ namespace Kernel static Scheduler& get(); [[noreturn]] void start(); + void timer_reschedule(); + void reschedule(); void reschedule_if_idling(); void set_current_thread_sleeping(uint64_t); diff --git a/kernel/kernel/Scheduler.cpp b/kernel/kernel/Scheduler.cpp index fd04815f..ca8f3c05 100644 --- a/kernel/kernel/Scheduler.cpp +++ b/kernel/kernel/Scheduler.cpp @@ -84,6 +84,21 @@ namespace Kernel ASSERT_NOT_REACHED(); } + void Scheduler::reschedule() + { + VERIFY_STI(); + DISABLE_INTERRUPTS(); + + if (save_current_thread()) + { + ENABLE_INTERRUPTS(); + return; + } + advance_current_thread(); + execute_current_thread(); + ASSERT_NOT_REACHED(); + } + void Scheduler::reschedule_if_idling() { VERIFY_CLI();