From 164ff0c13540227a1db5e4b12596070db32ab463 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Tue, 28 Oct 2025 08:35:34 +0100 Subject: [PATCH] Expand spinlock queue levels --- sdk/xtdk/ketypes.h | 10 +++++---- xtoskrnl/includes/ke/spinlock.hh | 12 +++++++++++ xtoskrnl/ke/data.cc | 36 ++++++++++++++++++++++++++++++++ xtoskrnl/ke/spinlock.cc | 30 ++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 4 deletions(-) diff --git a/sdk/xtdk/ketypes.h b/sdk/xtdk/ketypes.h index 45b7629e..5729ac7e 100644 --- a/sdk/xtdk/ketypes.h +++ b/sdk/xtdk/ketypes.h @@ -150,21 +150,23 @@ typedef enum _KTHREAD_STATE typedef enum _KSPIN_LOCK_QUEUE_LEVEL { DispatcherLock, - UnusedSpareLock, + ExpansionLock, PfnLock, SystemSpaceLock, VacbLock, MasterLock, - NonPagedPoolLock, + NonPagedAllocPoolLock, IoCancelLock, WorkQueueLock, IoVpbLock, IoDatabaseLock, IoCompletionLock, - FsStructLock, + FileSystemLock, AfdWorkQueueLock, BcbLock, - MmNonPagedPoolLock, + NonPagedPoolLock, + ReservedSystemLock, + TimerTableLock, MaximumLock } KSPIN_LOCK_QUEUE_LEVEL, *PKSPIN_LOCK_QUEUE_LEVEL; diff --git a/xtoskrnl/includes/ke/spinlock.hh b/xtoskrnl/includes/ke/spinlock.hh index 5245140e..a7528f1a 100644 --- a/xtoskrnl/includes/ke/spinlock.hh +++ b/xtoskrnl/includes/ke/spinlock.hh @@ -19,8 +19,20 @@ namespace KE { private: STATIC KSPIN_LOCK DispatcherLockQueue; + STATIC KSPIN_LOCK ExpansionLockQueue; + STATIC KSPIN_LOCK FileSystemLockQueue; + STATIC KSPIN_LOCK IoCancelLockQueue; + STATIC KSPIN_LOCK IoCompletionLockQueue; + STATIC KSPIN_LOCK IoDatabaseLockQueue; + STATIC KSPIN_LOCK IoVpbLockQueue; + STATIC KSPIN_LOCK MasterLockQueue; + STATIC KSPIN_LOCK NonPagedAllocLockQueue; + STATIC KSPIN_LOCK NonPagedPoolLockQueue; STATIC KSPIN_LOCK PfnLockQueue; STATIC KSPIN_LOCK SystemSpaceLockQueue; + STATIC KSPIN_LOCK TimerTableLockQueue; + STATIC KSPIN_LOCK VacbLockQueue; + STATIC KSPIN_LOCK WorkLockQueue; public: STATIC XTFASTCALL VOID AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel); diff --git a/xtoskrnl/ke/data.cc b/xtoskrnl/ke/data.cc index 88e594d3..5f09268a 100644 --- a/xtoskrnl/ke/data.cc +++ b/xtoskrnl/ke/data.cc @@ -24,12 +24,48 @@ BOOLEAN KE::KUbsan::ActiveFrame = FALSE; /* Kernel dispatcher lock queue */ KSPIN_LOCK KE::SpinLock::DispatcherLockQueue; +/* Kernel expansion lock queue */ +KSPIN_LOCK KE::SpinLock::ExpansionLockQueue; + +/* Kernel file system structures lock queue */ +KSPIN_LOCK KE::SpinLock::FileSystemLockQueue; + +/* Kernel IO cancel lock queue */ +KSPIN_LOCK KE::SpinLock::IoCancelLockQueue; + +/* Kernel IO completion lock queue */ +KSPIN_LOCK KE::SpinLock::IoCompletionLockQueue; + +/* Kernel IO database lock queue */ +KSPIN_LOCK KE::SpinLock::IoDatabaseLockQueue; + +/* Kernel IO VPB lock queue */ +KSPIN_LOCK KE::SpinLock::IoVpbLockQueue; + +/* Kernel cache master lock queue */ +KSPIN_LOCK KE::SpinLock::MasterLockQueue; + +/* Kernel non-paged allocator lock queue */ +KSPIN_LOCK KE::SpinLock::NonPagedAllocLockQueue; + +/* Kernel non-paged pool lock queue */ +KSPIN_LOCK KE::SpinLock::NonPagedPoolLockQueue; + /* Kernel PFN lock queue */ KSPIN_LOCK KE::SpinLock::PfnLockQueue; /* Kernel system space lock queue */ KSPIN_LOCK KE::SpinLock::SystemSpaceLockQueue; +/* Kernel Timer table lock queue */ +KSPIN_LOCK KE::SpinLock::TimerTableLockQueue; + +/* Kernel VACB lock queue */ +KSPIN_LOCK KE::SpinLock::VacbLockQueue; + +/* Kernel work queue lock queue */ +KSPIN_LOCK KE::SpinLock::WorkLockQueue; + /* Kernel boot resources list */ LIST_ENTRY KE::SystemResources::ResourcesListHead; diff --git a/xtoskrnl/ke/spinlock.cc b/xtoskrnl/ke/spinlock.cc index 679ae24b..f1db8c4c 100644 --- a/xtoskrnl/ke/spinlock.cc +++ b/xtoskrnl/ke/spinlock.cc @@ -93,10 +93,40 @@ KE::SpinLock::InitializeLockQueues() /* Initialize PCB lock queues */ ControlBlock->LockQueue[DispatcherLock].Lock = &DispatcherLockQueue; ControlBlock->LockQueue[DispatcherLock].Next = NULLPTR; + ControlBlock->LockQueue[ExpansionLock].Lock = &ExpansionLockQueue; + ControlBlock->LockQueue[ExpansionLock].Next = NULLPTR; ControlBlock->LockQueue[PfnLock].Lock = &PfnLockQueue; ControlBlock->LockQueue[PfnLock].Next = NULLPTR; ControlBlock->LockQueue[SystemSpaceLock].Lock = &SystemSpaceLockQueue; ControlBlock->LockQueue[SystemSpaceLock].Next = NULLPTR; + ControlBlock->LockQueue[VacbLock].Lock = &VacbLockQueue; + ControlBlock->LockQueue[VacbLock].Next = NULLPTR; + ControlBlock->LockQueue[MasterLock].Lock = &MasterLockQueue; + ControlBlock->LockQueue[MasterLock].Next = NULLPTR; + ControlBlock->LockQueue[NonPagedAllocPoolLock].Lock = &NonPagedAllocLockQueue; + ControlBlock->LockQueue[NonPagedAllocPoolLock].Next = NULLPTR; + ControlBlock->LockQueue[IoCancelLock].Lock = &IoCancelLockQueue; + ControlBlock->LockQueue[IoCancelLock].Next = NULLPTR; + ControlBlock->LockQueue[WorkQueueLock].Lock = &WorkLockQueue; + ControlBlock->LockQueue[WorkQueueLock].Next = NULLPTR; + ControlBlock->LockQueue[IoVpbLock].Lock = &IoVpbLockQueue; + ControlBlock->LockQueue[IoVpbLock].Next = NULLPTR; + ControlBlock->LockQueue[IoDatabaseLock].Lock = &IoDatabaseLockQueue; + ControlBlock->LockQueue[IoDatabaseLock].Next = NULLPTR; + ControlBlock->LockQueue[IoCompletionLock].Lock = &IoCompletionLockQueue; + ControlBlock->LockQueue[IoCompletionLock].Next = NULLPTR; + ControlBlock->LockQueue[FileSystemLock].Lock = &FileSystemLockQueue; + ControlBlock->LockQueue[FileSystemLock].Next = NULLPTR; + ControlBlock->LockQueue[AfdWorkQueueLock].Lock = NULLPTR; + ControlBlock->LockQueue[AfdWorkQueueLock].Next = NULLPTR; + ControlBlock->LockQueue[BcbLock].Lock = NULLPTR; + ControlBlock->LockQueue[BcbLock].Next = NULLPTR; + ControlBlock->LockQueue[NonPagedPoolLock].Lock = &NonPagedPoolLockQueue; + ControlBlock->LockQueue[NonPagedPoolLock].Next = NULLPTR; + ControlBlock->LockQueue[ReservedSystemLock].Lock = NULLPTR; + ControlBlock->LockQueue[ReservedSystemLock].Next = NULLPTR; + ControlBlock->LockQueue[TimerTableLock].Lock = &TimerTableLockQueue; + ControlBlock->LockQueue[TimerTableLock].Next = NULLPTR; } /**