From 8c6e06c9736fc86aea4bbcd54df69656865466fe Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Thu, 25 Jun 2026 21:32:16 +0200 Subject: [PATCH] Introduce RAII wrapper for in-stack queued spinlock acquisition --- xtoskrnl/includes/ke/guard.hh | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/xtoskrnl/includes/ke/guard.hh b/xtoskrnl/includes/ke/guard.hh index 186f963..fe51dda 100644 --- a/xtoskrnl/includes/ke/guard.hh +++ b/xtoskrnl/includes/ke/guard.hh @@ -16,6 +16,37 @@ /* Kernel Library */ namespace KE { + class QueuedSpinLockGuard + { + private: + KLOCK_QUEUE_HANDLE LockQueueHandle; + PKSPIN_LOCK Lock; + BOOLEAN Owned; + + public: + QueuedSpinLockGuard(IN OUT PKSPIN_LOCK SpinLock, + IN BOOLEAN Acquire = TRUE) + { + Lock = SpinLock; + Owned = Acquire; + if(Owned) + { + KE::SpinLock::AcquireQueuedSpinLock(Lock, &LockQueueHandle); + } + } + + ~QueuedSpinLockGuard() + { + if(Owned) + { + KE::SpinLock::ReleaseQueuedSpinLock(&LockQueueHandle); + } + } + + QueuedSpinLockGuard(const QueuedSpinLockGuard&) = delete; + QueuedSpinLockGuard& operator=(const QueuedSpinLockGuard&) = delete; + }; + class SystemQueuedSpinLockGuard { private: @@ -24,7 +55,7 @@ namespace KE public: SystemQueuedSpinLockGuard(IN OUT KSPIN_LOCK_QUEUE_LEVEL LockLevel, - IN BOOLEAN Acquire = TRUE) + IN BOOLEAN Acquire = TRUE) { QueuedLockLevel = LockLevel; Owned = Acquire;