From 1aec3fcedd8fab15679c6f999c2bbab416b63a73 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 9 Jun 2023 00:47:17 +0300 Subject: [PATCH] Kernel: Scheduler now has reschedule() This can be called from anywhere and just causes the scheduler to schedule the next thread. This is more efficient and verbose version of Scheduler::set_current_thread_sleeping(0), since we don't have to wake other threads or do other verifications. --- kernel/include/kernel/Scheduler.h | 2 ++ kernel/kernel/Scheduler.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+) 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();