Expand spinlock queue levels
This commit is contained in:
@@ -150,21 +150,23 @@ typedef enum _KTHREAD_STATE
|
|||||||
typedef enum _KSPIN_LOCK_QUEUE_LEVEL
|
typedef enum _KSPIN_LOCK_QUEUE_LEVEL
|
||||||
{
|
{
|
||||||
DispatcherLock,
|
DispatcherLock,
|
||||||
UnusedSpareLock,
|
ExpansionLock,
|
||||||
PfnLock,
|
PfnLock,
|
||||||
SystemSpaceLock,
|
SystemSpaceLock,
|
||||||
VacbLock,
|
VacbLock,
|
||||||
MasterLock,
|
MasterLock,
|
||||||
NonPagedPoolLock,
|
NonPagedAllocPoolLock,
|
||||||
IoCancelLock,
|
IoCancelLock,
|
||||||
WorkQueueLock,
|
WorkQueueLock,
|
||||||
IoVpbLock,
|
IoVpbLock,
|
||||||
IoDatabaseLock,
|
IoDatabaseLock,
|
||||||
IoCompletionLock,
|
IoCompletionLock,
|
||||||
FsStructLock,
|
FileSystemLock,
|
||||||
AfdWorkQueueLock,
|
AfdWorkQueueLock,
|
||||||
BcbLock,
|
BcbLock,
|
||||||
MmNonPagedPoolLock,
|
NonPagedPoolLock,
|
||||||
|
ReservedSystemLock,
|
||||||
|
TimerTableLock,
|
||||||
MaximumLock
|
MaximumLock
|
||||||
} KSPIN_LOCK_QUEUE_LEVEL, *PKSPIN_LOCK_QUEUE_LEVEL;
|
} KSPIN_LOCK_QUEUE_LEVEL, *PKSPIN_LOCK_QUEUE_LEVEL;
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,20 @@ namespace KE
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
STATIC KSPIN_LOCK DispatcherLockQueue;
|
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 PfnLockQueue;
|
||||||
STATIC KSPIN_LOCK SystemSpaceLockQueue;
|
STATIC KSPIN_LOCK SystemSpaceLockQueue;
|
||||||
|
STATIC KSPIN_LOCK TimerTableLockQueue;
|
||||||
|
STATIC KSPIN_LOCK VacbLockQueue;
|
||||||
|
STATIC KSPIN_LOCK WorkLockQueue;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
STATIC XTFASTCALL VOID AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel);
|
STATIC XTFASTCALL VOID AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel);
|
||||||
|
|||||||
@@ -24,12 +24,48 @@ BOOLEAN KE::KUbsan::ActiveFrame = FALSE;
|
|||||||
/* Kernel dispatcher lock queue */
|
/* Kernel dispatcher lock queue */
|
||||||
KSPIN_LOCK KE::SpinLock::DispatcherLockQueue;
|
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 */
|
/* Kernel PFN lock queue */
|
||||||
KSPIN_LOCK KE::SpinLock::PfnLockQueue;
|
KSPIN_LOCK KE::SpinLock::PfnLockQueue;
|
||||||
|
|
||||||
/* Kernel system space lock queue */
|
/* Kernel system space lock queue */
|
||||||
KSPIN_LOCK KE::SpinLock::SystemSpaceLockQueue;
|
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 */
|
/* Kernel boot resources list */
|
||||||
LIST_ENTRY KE::SystemResources::ResourcesListHead;
|
LIST_ENTRY KE::SystemResources::ResourcesListHead;
|
||||||
|
|
||||||
|
|||||||
@@ -93,10 +93,40 @@ KE::SpinLock::InitializeLockQueues()
|
|||||||
/* Initialize PCB lock queues */
|
/* Initialize PCB lock queues */
|
||||||
ControlBlock->LockQueue[DispatcherLock].Lock = &DispatcherLockQueue;
|
ControlBlock->LockQueue[DispatcherLock].Lock = &DispatcherLockQueue;
|
||||||
ControlBlock->LockQueue[DispatcherLock].Next = NULLPTR;
|
ControlBlock->LockQueue[DispatcherLock].Next = NULLPTR;
|
||||||
|
ControlBlock->LockQueue[ExpansionLock].Lock = &ExpansionLockQueue;
|
||||||
|
ControlBlock->LockQueue[ExpansionLock].Next = NULLPTR;
|
||||||
ControlBlock->LockQueue[PfnLock].Lock = &PfnLockQueue;
|
ControlBlock->LockQueue[PfnLock].Lock = &PfnLockQueue;
|
||||||
ControlBlock->LockQueue[PfnLock].Next = NULLPTR;
|
ControlBlock->LockQueue[PfnLock].Next = NULLPTR;
|
||||||
ControlBlock->LockQueue[SystemSpaceLock].Lock = &SystemSpaceLockQueue;
|
ControlBlock->LockQueue[SystemSpaceLock].Lock = &SystemSpaceLockQueue;
|
||||||
ControlBlock->LockQueue[SystemSpaceLock].Next = NULLPTR;
|
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