From 916d124c9beceafe583b6761f0a3c9ff3d8ed322 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sat, 21 Mar 2026 22:44:00 +0100 Subject: [PATCH] Separate synchronization guards from spinlock implementation --- xtoskrnl/includes/ke.hh | 1 + xtoskrnl/includes/ke/guard.hh | 61 ++++++++++++++++++++++++++++++++ xtoskrnl/includes/ke/spinlock.hh | 42 ---------------------- 3 files changed, 62 insertions(+), 42 deletions(-) create mode 100644 xtoskrnl/includes/ke/guard.hh diff --git a/xtoskrnl/includes/ke.hh b/xtoskrnl/includes/ke.hh index 063a367..607e2e7 100644 --- a/xtoskrnl/includes/ke.hh +++ b/xtoskrnl/includes/ke.hh @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include diff --git a/xtoskrnl/includes/ke/guard.hh b/xtoskrnl/includes/ke/guard.hh new file mode 100644 index 0000000..27bd824 --- /dev/null +++ b/xtoskrnl/includes/ke/guard.hh @@ -0,0 +1,61 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/includes/ke/guard.hh + * DESCRIPTION: Kernel synchronization guard + * DEVELOPERS: Aiken Harris + */ + +#ifndef __XTOSKRNL_KE_GUARD_HH +#define __XTOSKRNL_KE_GUARD_HH + +#include +#include + +/* Kernel Library */ +namespace KE +{ + class QueuedSpinLockGuard + { + private: + KSPIN_LOCK_QUEUE_LEVEL QueuedLockLevel; + + public: + QueuedSpinLockGuard(IN OUT KSPIN_LOCK_QUEUE_LEVEL LockLevel) + { + QueuedLockLevel = LockLevel; + KE::SpinLock::AcquireQueuedSpinLock(QueuedLockLevel); + } + + ~QueuedSpinLockGuard() + { + KE::SpinLock::ReleaseQueuedSpinLock(QueuedLockLevel); + } + + QueuedSpinLockGuard(const QueuedSpinLockGuard&) = delete; + QueuedSpinLockGuard& operator=(const QueuedSpinLockGuard&) = delete; + }; + + class SpinLockGuard + { + private: + PKSPIN_LOCK Lock; + + public: + SpinLockGuard(IN OUT PKSPIN_LOCK SpinLock) + { + Lock = SpinLock; + KE::SpinLock::AcquireSpinLock(Lock); + } + + ~SpinLockGuard() + { + KE::SpinLock::ReleaseSpinLock(Lock); + } + + SpinLockGuard(const SpinLockGuard&) = delete; + SpinLockGuard& operator=(const SpinLockGuard&) = delete; + }; +} + +#endif /* __XTOSKRNL_KE_GUARD_HH */ diff --git a/xtoskrnl/includes/ke/spinlock.hh b/xtoskrnl/includes/ke/spinlock.hh index f2e0259..c510ae8 100644 --- a/xtoskrnl/includes/ke/spinlock.hh +++ b/xtoskrnl/includes/ke/spinlock.hh @@ -44,48 +44,6 @@ namespace KE STATIC XTFASTCALL VOID ReleaseSpinLock(IN OUT PKSPIN_LOCK SpinLock); STATIC XTFASTCALL BOOLEAN TestSpinLock(IN PKSPIN_LOCK SpinLock); }; - - class QueuedSpinLockGuard - { - private: - KSPIN_LOCK_QUEUE_LEVEL QueuedLockLevel; - - public: - QueuedSpinLockGuard(IN OUT KSPIN_LOCK_QUEUE_LEVEL LockLevel) - { - QueuedLockLevel = LockLevel; - KE::SpinLock::AcquireQueuedSpinLock(QueuedLockLevel); - } - - ~QueuedSpinLockGuard() - { - KE::SpinLock::ReleaseQueuedSpinLock(QueuedLockLevel); - } - - QueuedSpinLockGuard(const QueuedSpinLockGuard&) = delete; - QueuedSpinLockGuard& operator=(const QueuedSpinLockGuard&) = delete; - }; - - class SpinLockGuard - { - private: - PKSPIN_LOCK Lock; - - public: - SpinLockGuard(IN OUT PKSPIN_LOCK SpinLock) - { - Lock = SpinLock; - KE::SpinLock::AcquireSpinLock(Lock); - } - - ~SpinLockGuard() - { - KE::SpinLock::ReleaseSpinLock(Lock); - } - - SpinLockGuard(const SpinLockGuard&) = delete; - SpinLockGuard& operator=(const SpinLockGuard&) = delete; - }; } #endif /* __XTOSKRNL_KE_SPINLOCK_HH */