Expand spinlock queue levels
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user