You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
369 lines
8.5 KiB
369 lines
8.5 KiB
title "Global SpinLock declerations"
|
|
;++
|
|
;
|
|
;Copyright (c) 1991 Microsoft Corporation
|
|
;
|
|
;Module Name:
|
|
;
|
|
; splocks.asm
|
|
;
|
|
;Abstract:
|
|
;
|
|
; All global spinlocks in the kernel image are declared in this
|
|
; module. This is done so that each spinlock can be spaced out
|
|
; sufficiently to guaarantee that the L2 cache does not thrash
|
|
; by having a spinlock and another high use variable in the same
|
|
; cache line.
|
|
;
|
|
;Author:
|
|
;
|
|
; Ken Reneris (kenr) 13-Jan-1992
|
|
;
|
|
;Revision History:
|
|
;
|
|
;--
|
|
|
|
.386p
|
|
.xlist
|
|
|
|
ifdef NT_UP
|
|
|
|
PADLOCKS equ 4
|
|
|
|
_DATA SEGMENT PARA PUBLIC 'DATA'
|
|
|
|
else
|
|
|
|
PADLOCKS equ 128
|
|
|
|
_DATA SEGMENT PAGE PUBLIC 'DATA'
|
|
|
|
endif
|
|
|
|
SPINLOCK macro SpinLockName
|
|
|
|
align PADLOCKS
|
|
|
|
public SpinLockName
|
|
SpinLockName dd 0
|
|
|
|
endm
|
|
|
|
ULONG macro VariableName
|
|
|
|
align PADLOCKS
|
|
|
|
public VariableName
|
|
VariableName dd 0
|
|
|
|
endm
|
|
|
|
;
|
|
; Static SpinLocks from ntos\cc\cachedat.c
|
|
;
|
|
|
|
SPINLOCK _CcMasterSpinLock
|
|
SPINLOCK _CcWorkQueueSpinLock
|
|
SPINLOCK _CcVacbSpinLock
|
|
SPINLOCK _CcDeferredWriteSpinLock
|
|
SPINLOCK _CcDebugTraceLock
|
|
SPINLOCK _CcBcbSpinLock
|
|
|
|
;
|
|
; Static SpinLocks from ntos\ex
|
|
;
|
|
|
|
SPINLOCK _NonPagedPoolLock ; pool.c
|
|
SPINLOCK _ExpResourceSpinLock ; resource.c
|
|
|
|
;
|
|
; Static SpinLocks from ntos\io\iodata.c
|
|
;
|
|
|
|
SPINLOCK _IopCompletionLock
|
|
SPINLOCK _IopCancelSpinLock
|
|
SPINLOCK _IopVpbSpinLock
|
|
SPINLOCK _IopDatabaseLock
|
|
SPINLOCK _IopErrorLogLock
|
|
SPINLOCK _IopTimerLock
|
|
SPINLOCK _IoStatisticsLock
|
|
|
|
;
|
|
; Static SpinLocks from ntos\kd\kdlock.c
|
|
;
|
|
|
|
SPINLOCK _KdpDebuggerLock
|
|
|
|
;
|
|
; Static SpinLocks from ntos\ke\kernldat.c
|
|
;
|
|
|
|
SPINLOCK _KiDispatcherLock
|
|
SPINLOCK _KiFreezeExecutionLock
|
|
SPINLOCK _KiFreezeLockBackup
|
|
ULONG _KiHardwareTrigger
|
|
SPINLOCK _KiProfileLock
|
|
|
|
;
|
|
; Static SpinLocks from ntos\mm\miglobal.c
|
|
;
|
|
|
|
SPINLOCK _MmPfnLock
|
|
SPINLOCK _MmSystemSpaceLock
|
|
SPINLOCK _MmNonPagedPoolLock
|
|
|
|
;
|
|
; Static SpinLocks from ntos\ps\psinit.c
|
|
;
|
|
|
|
SPINLOCK _PspEventPairLock
|
|
SPINLOCK _PsLoadedModuleSpinLock
|
|
|
|
;
|
|
; Static SpinLocks from ntos\fsrtl\fsrtlp.c
|
|
;
|
|
|
|
SPINLOCK _FsRtlStrucSupSpinLock ; fsrtlp.c
|
|
|
|
;
|
|
; Static SpinLocks from base\fs\ntfs
|
|
;
|
|
|
|
SPINLOCK _NtfsStructLock
|
|
|
|
;
|
|
; Static SpinLocks from net\sockets\winsock2\wsp\afdsys
|
|
;
|
|
|
|
SPINLOCK _AfdWorkQueueSpinLock
|
|
|
|
;
|
|
; These variables are updated frequently and under control of the dispatcher
|
|
; database lock. They are defined in a single cache line to reduce false
|
|
; sharing in MP systems.
|
|
;
|
|
; KiIdleSummary - This is the set of processors which are idle. It is
|
|
; used by the ready thread code to speed up the search for a thread
|
|
; to preempt when a thread becomes runnable.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _KiIdleSummary
|
|
_KiIdleSummary dd 0
|
|
|
|
;
|
|
; KiIdleSMTSummary - In multi threaded processors, this is the set of
|
|
; idle processors in which all the logical processors that make up a
|
|
; physical processor are idle. That is, this is the set of logical
|
|
; processors in completely idle physical processors.
|
|
;
|
|
|
|
public _KiIdleSMTSummary
|
|
_KiIdleSMTSummary dd 0
|
|
|
|
;
|
|
; PoSleepingSummary - Set of processors which currently sleep (ie stop)
|
|
; when idle.
|
|
;
|
|
|
|
public _PoSleepingSummary
|
|
_PoSleepingSummary dd 0
|
|
|
|
;
|
|
; KiTbFlushTimeStamp - This is the TB flush entire time stamp counter.
|
|
;
|
|
; This variable is in it own cache line to reduce false sharing on MP systems.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _KiTbFlushTimeStamp
|
|
_KiTbFlushTimeStamp dd 0
|
|
|
|
;
|
|
; These variables are referenced together and are defined in a single cache
|
|
; line to reduce sharing on MP systems.
|
|
;
|
|
; KeTickCount - This is the number of clock ticks that have occurred since
|
|
; the system was booted. This count is used to compute a millisecond
|
|
; tick counter.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _KeTickCount
|
|
_KeTickCount dd 0, 0, 0
|
|
|
|
;
|
|
; KeMaximumIncrement - This is the maximum time between clock interrupts
|
|
; in 100ns units that is supported by the host HAL.
|
|
;
|
|
|
|
public _KeMaximumIncrement
|
|
_KeMaximumIncrement dd 0
|
|
|
|
;
|
|
; KiSlotZeroTime - This is a cached time thats close to the current time.
|
|
; This time always reduces to a time that fits into slot zero so we can use
|
|
; this value via subtract to get absolute times into an easy range for modular
|
|
; reduction.
|
|
;
|
|
public _KiSlotZeroTime
|
|
|
|
_KiSlotZeroTime dd 0,0
|
|
|
|
;
|
|
; KiMaximumIncrementReciprocal - This is the 32 bit reciprocal of KeMaximumIncrement
|
|
;
|
|
public _KiMaximumIncrementReciprocal
|
|
|
|
_KiMaximumIncrementReciprocal dd 0
|
|
;
|
|
; KiLog2MaximumIncrement - This is FLOOR (log2 (KeMaximumIncrement))
|
|
;
|
|
public _KiLog2MaximumIncrement
|
|
|
|
_KiLog2MaximumIncrement dd 0
|
|
|
|
;
|
|
; KiUpperModMul - This is (2^32) % (KeMaximumIncrement * TIMER_TABLE_SIZE).
|
|
; This value is used to reduce an absolute time to a 32 bit number by multiplying
|
|
; the high DWORD.
|
|
;
|
|
public _KiUpperModMul
|
|
|
|
_KiUpperModMul dd 0
|
|
|
|
;
|
|
; _KeTimerReductionModulus - This is KeMaximumIncrement * TIMER_TABLE_SIZE.
|
|
; We can add or sobtract this value froma time without affecting its slot number.
|
|
;
|
|
|
|
public _KeTimerReductionModulus
|
|
|
|
_KeTimerReductionModulus dd 0
|
|
|
|
;
|
|
; KeTimeAdjustment - This is the actual number of 100ns units that are to
|
|
; be added to the system time at each interval timer interupt. This
|
|
; value is copied from KeTimeIncrement at system start up and can be
|
|
; later modified via the set system information service.
|
|
; timer table entries.
|
|
;
|
|
|
|
public _KeTimeAdjustment
|
|
_KeTimeAdjustment dd 0
|
|
|
|
;
|
|
; KiTickOffset - This is the number of 100ns units remaining before a tick
|
|
; is added to the tick count and the system time is updated.
|
|
;
|
|
|
|
public _KiTickOffset
|
|
_KiTickOffset dd 0
|
|
|
|
;
|
|
; These variables are referenced together and are defined in a single cache
|
|
; line to reduce sharing on MP systems.
|
|
;
|
|
; KiMaximumDpcQueueDepth - This is used to control how many DPCs can be
|
|
; queued before a DPC of medium importance will trigger a dispatch
|
|
; interrupt.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _KiMaximumDpcQueueDepth
|
|
_KiMaximumDpcQueueDepth dd 4
|
|
|
|
;
|
|
; KiMinimumDpcRate - This is the rate of DPC requests per clock tick that
|
|
; must be exceeded before DPC batching of medium importance DPCs
|
|
; will occur.
|
|
;
|
|
|
|
public _KiMinimumDpcRate
|
|
_KiMinimumDpcRate dd 3
|
|
|
|
;
|
|
; KiAdjustDpcThreshold - This is the threshold used by the clock interrupt
|
|
; routine to control the rate at which the processor's DPC queue depth
|
|
; is dynamically adjusted.
|
|
;
|
|
|
|
public _KiAdjustDpcThreshold
|
|
_KiAdjustDpcThreshold dd 20
|
|
|
|
;
|
|
; KiIdealDpcRate - This is used to control the aggressiveness of the DPC
|
|
; rate adjusting algorithm when decrementing the queue depth. As long
|
|
; as the DPC rate for the last tick is greater than this rate, the
|
|
; DPC queue depth will not be decremented.
|
|
;
|
|
|
|
public _KiIdealDpcRate
|
|
_KiIdealDpcRate dd 20
|
|
|
|
;
|
|
; These variables are referenced together and are defined in a single cache
|
|
; line to reduce sharing on MP systems.
|
|
;
|
|
; KeErrorMask - This is the value used to mask the error code passed to
|
|
; memory management on page faults.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _KeErrorMask
|
|
_KeErrorMask dd 1
|
|
|
|
;
|
|
; MmPaeErrMask - This is the value used to mask upper bits of a PAE error.
|
|
;
|
|
|
|
public _MmPaeErrMask
|
|
_MmPaeErrMask dd 0
|
|
|
|
;
|
|
; MmPaeMask - This is the value used to mask upper bits of a PAE PTE.
|
|
;
|
|
|
|
public _MmPaeMask
|
|
_MmPaeMask dq 0
|
|
|
|
;
|
|
; MmPfnDereferenceSListHead - This is used to store free blocks used for
|
|
; deferred PFN reference count releasing.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _MmPfnDereferenceSListHead
|
|
_MmPfnDereferenceSListHead dq 0
|
|
|
|
;
|
|
; MmPfnDeferredList - This is used to queue items that need reference count
|
|
; decrement processing.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _MmPfnDeferredList
|
|
_MmPfnDeferredList dd 0
|
|
|
|
;
|
|
; MmSystemLockPagesCount - This is the count of the number of locked pages
|
|
; in the system.
|
|
;
|
|
|
|
align PADLOCKS
|
|
|
|
public _MmSystemLockPagesCount
|
|
_MmSystemLockPagesCount dd 0
|
|
|
|
align PADLOCKS
|
|
|
|
_DATA ends
|
|
|
|
end
|