From 6cbda52d6bbc674f72b0132ef6735b2689e86469 Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Wed, 29 Apr 2026 20:31:34 +0200 Subject: [PATCH] Extract Dispatcher class from KThread --- xtoskrnl/CMakeLists.txt | 1 + xtoskrnl/includes/ke.hh | 1 + xtoskrnl/includes/ke/dispatch.hh | 25 +++++++++++++++++++++++++ xtoskrnl/includes/ke/kthread.hh | 1 - xtoskrnl/ke/dispatch.cc | 30 ++++++++++++++++++++++++++++++ xtoskrnl/ke/kthread.cc | 20 -------------------- xtoskrnl/ke/timer.cc | 4 ++-- 7 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 xtoskrnl/includes/ke/dispatch.hh create mode 100644 xtoskrnl/ke/dispatch.cc diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index 6246cc3..e942e8d 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -41,6 +41,7 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/ke/bootinfo.cc ${XTOSKRNL_SOURCE_DIR}/ke/crash.cc ${XTOSKRNL_SOURCE_DIR}/ke/data.cc + ${XTOSKRNL_SOURCE_DIR}/ke/dispatch.cc ${XTOSKRNL_SOURCE_DIR}/ke/dpc.cc ${XTOSKRNL_SOURCE_DIR}/ke/event.cc ${XTOSKRNL_SOURCE_DIR}/ke/exports.cc diff --git a/xtoskrnl/includes/ke.hh b/xtoskrnl/includes/ke.hh index e4ceec4..3bd4419 100644 --- a/xtoskrnl/includes/ke.hh +++ b/xtoskrnl/includes/ke.hh @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include diff --git a/xtoskrnl/includes/ke/dispatch.hh b/xtoskrnl/includes/ke/dispatch.hh new file mode 100644 index 0000000..0f58ba5 --- /dev/null +++ b/xtoskrnl/includes/ke/dispatch.hh @@ -0,0 +1,25 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/includes/ke/dispatch.hh + * DESCRIPTION: Kernel Thread Dispatcher + * DEVELOPERS: Rafal Kupiec + */ + +#ifndef __XTOSKRNL_KE_DISPATCH_HH +#define __XTOSKRNL_KE_DISPATCH_HH + +#include + + +/* Kernel Library */ +namespace KE +{ + class Dispatcher + { + public: + STATIC XTFASTCALL VOID ExitDispatcher(IN KRUNLEVEL OldRunLevel); + }; +} + +#endif /* __XTOSKRNL_KE_DISPATCH_HH */ diff --git a/xtoskrnl/includes/ke/kthread.hh b/xtoskrnl/includes/ke/kthread.hh index f924e71..288ce99 100644 --- a/xtoskrnl/includes/ke/kthread.hh +++ b/xtoskrnl/includes/ke/kthread.hh @@ -21,7 +21,6 @@ namespace KE STATIC ETHREAD InitialThread; public: - STATIC XTFASTCALL VOID ExitDispatcher(IN KRUNLEVEL OldRunLevel); STATIC XTAPI PETHREAD GetInitialThread(VOID); STATIC XTAPI XTSTATUS InitializeThread(IN PKPROCESS Process, IN OUT PKTHREAD Thread, diff --git a/xtoskrnl/ke/dispatch.cc b/xtoskrnl/ke/dispatch.cc new file mode 100644 index 0000000..a8f9c78 --- /dev/null +++ b/xtoskrnl/ke/dispatch.cc @@ -0,0 +1,30 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/ke/dispatch.cc + * DESCRIPTION: Kernel Thread Dispatcher + * DEVELOPERS: Rafal Kupiec + */ + +#include + + +/** + * Exits the dispatcher, switches context to a new thread and lowers runlevel to its original state. + * + * @param OldRunLevel + * Supplies the original runlevel state. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTFASTCALL +VOID +KE::Dispatcher::ExitDispatcher(IN KRUNLEVEL OldRunLevel) +{ + UNIMPLEMENTED; + + /* Lower runlevel */ + RunLevel::LowerRunLevel(OldRunLevel); +} diff --git a/xtoskrnl/ke/kthread.cc b/xtoskrnl/ke/kthread.cc index 59ace69..55b3e64 100644 --- a/xtoskrnl/ke/kthread.cc +++ b/xtoskrnl/ke/kthread.cc @@ -16,26 +16,6 @@ KE::KThread::GetInitialThread(VOID) return &InitialThread; } -/** - * Exits the dispatcher, switches context to a new thread and lowers runlevel to its original state. - * - * @param OldRunLevel - * Supplies the original runlevel state. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTFASTCALL -VOID -KE::KThread::ExitDispatcher(IN KRUNLEVEL OldRunLevel) -{ - UNIMPLEMENTED; - - /* Lower runlevel */ - RunLevel::LowerRunLevel(OldRunLevel); -} - /** * Initializes the thread. * diff --git a/xtoskrnl/ke/timer.cc b/xtoskrnl/ke/timer.cc index 64ff2fc..911d4c7 100644 --- a/xtoskrnl/ke/timer.cc +++ b/xtoskrnl/ke/timer.cc @@ -43,7 +43,7 @@ KE::Timer::CancelTimer(IN PKTIMER Timer) /* Release dispatcher lock and process the deferred ready list */ KE::SpinLock::ReleaseQueuedSpinLock(DispatcherLock); - KE::KThread::ExitDispatcher(RunLevel); + KE::Dispatcher::ExitDispatcher(RunLevel); /* Return result */ return Result; @@ -150,7 +150,7 @@ KE::Timer::QueryTimer(IN PKTIMER Timer) /* Release dispatcher lock and process the deferred ready list */ KE::SpinLock::ReleaseQueuedSpinLock(DispatcherLock); - KE::KThread::ExitDispatcher(RunLevel); + KE::Dispatcher::ExitDispatcher(RunLevel); /* Return timer's due time */ return DueTime;