windows-nt/Source/XPSP1/NT/base/ntos/ex/amd64/hifreqlk.asm
2020-09-26 16:20:57 +08:00

370 lines
7.3 KiB
NASM

title "Global SpinLock declerations"
;++
;
;Copyright (c) 2000 Microsoft Corporation
;
; Module Name:
;
; hifreqlk.asm
;
; Abstract:
;
; High frequency system spin locks are declared in this module. Each spin
; lock is placed in its own cache line on MP systems.
;
; Author:
;
; David N. Cutler (davec) 22-Jun-2000
;
;Revision History:
;
;--
include ksamd64.inc
ifdef NT_UP
ALIGN_VALUE equ 16
else
ALIGN_VALUE equ 128
endif
;
; Define spin lock generation macro.
;
SPINLOCK macro SpinLockName
align ALIGN_VALUE
public SpinLockName
SpinLockName:
dq 0
endm
;
; Define variable generation macro.
;
ULONG64 macro VariableName
align ALIGN_VALUE
public VariableName
VariableName:
dq 0
endm
_DATA$00 SEGMENT PAGE PUBLIC 'DATA'
;
; The Initial PCR must be the first allocation in the section so it will be
; page aligned.
;
public KiInitialPCR
KiInitialPCR:
db ProcessorControlRegisterLength dup (0) ;
;
; Static SpinLocks from ntos\cc
;
SPINLOCK CcMasterSpinLock
SPINLOCK CcWorkQueueSpinLock
SPINLOCK CcVacbSpinLock
SPINLOCK CcDeferredWriteSpinLock
SPINLOCK CcDebugTraceLock
SPINLOCK CcBcbSpinLock
;
; Static SpinLocks from ntos\ex
;
SPINLOCK NonPagedPoolLock
SPINLOCK ExpResourceSpinLock
;
; Static SpinLocks from ntos\io
;
SPINLOCK IopCompletionLock
SPINLOCK IopCancelSpinLock
SPINLOCK IopVpbSpinLock
SPINLOCK IopDatabaseLock
SPINLOCK IopErrorLogLock
SPINLOCK IopTimerLock
SPINLOCK IoStatisticsLock
;
; Static SpinLocks from ntos\kd
;
SPINLOCK KdpDebuggerLock
;
; Static SpinLocks from ntos\ke
;
SPINLOCK KiContextSwapLock
SPINLOCK KiDispatcherLock
SPINLOCK KiFreezeExecutionLock
SPINLOCK KiFreezeLockBackup
SPINLOCK KiProfileLock
ULONG64 KiHardwareTrigger
;
; Static SpinLocks from ntos\mm
;
SPINLOCK MmPfnLock
SPINLOCK MmSystemSpaceLock
SPINLOCK MmChargeCommitmentLock
;
; Static SpinLocks from ntos\ps
;
SPINLOCK PspEventPairLock
SPINLOCK PsLoadedModuleSpinLock
;
; Static SpinLocks from ntos\fsrtl
;
SPINLOCK FsRtlStrucSupSpinLock
;
; Static SpinLocks from base\fs\ntfs
;
SPINLOCK NtfsStructLock
;
; Static SpinLocks from net\sockets\winsock2\wsp
;
SPINLOCK AfdWorkQueueSpinLock
;
; These variables are referenced together and are defined in a single cache
; line to reduce sharing on 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 ALIGN_VALUE
public KiIdleSummary
KiIdleSummary:
dq 0
;
; KiReadySummary - This is the set of dispatcher ready queues that are not
; empty. A member is set in this set for each priority that has one or
; more entries in its respective dispatcher ready queues.
;
public KiReadySummary
KiReadySummary:
dq 0
;
; PoSleepingSummary - Set of processors which currently sleep (ie stop)
; when idle.
;
public PoSleepingSummary
PoSleepingSummary:
dq 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 ALIGN_VALUE
public KiTbFlushTimeStamp
KiTbFlushTimeStamp:
dd 0
;
; These variables are referenced together and are defined in a single cache
; line to reduce sharing on MP systems.
;
; IopLookasideIrpFloat - This is the number of IRPs that are currently
; in progress that were allocated from a lookaside list.
;
align ALIGN_VALUE
public IopLookasideIrpFloat
IopLookasideIrpFloat:
dd 0
;
; IopLookasideIrpLimit - This is the maximum number of IRPs that can be
; in progress that were allocated from a lookaside list.
;
public IopLookasideIrpLimit
IopLookasideIrpLimit:
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 ALIGN_VALUE
public KeTickCount
KeTickCount:
dq 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
;
; 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 ALIGN_VALUE
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
;
; MmPaeMask - This is the value used to mask upper bits of a PAE PTE.
;
; This variable is in it own cache line to reduce false sharing on MP systems.
;
align ALIGN_VALUE
public MmPaeMask
MmPaeMask:
dq 0
;
; MmPfnDereferenceSListHead - This is used to store free blocks used for
; deferred PFN reference count releasing.
;
; This variable is in it own cache line to reduce false sharing on MP systems.
;
align ALIGN_VALUE
public MmPfnDereferenceSListHead
MmPfnDereferenceSListHead:
dq 0
dq 0
;
; MmPfnDeferredList - This is used to queue items that need reference count
; decrement processing.
;
; This variable is in it own cache line to reduce false sharing on MP systems.
;
align ALIGN_VALUE
public MmPfnDeferredList
MmPfnDeferredList:
dq 0
;
; MmSystemLockPagesCount - This is the count of the number of locked pages
; in the system.
;
align ALIGN_VALUE
public MmSystemLockPagesCount
MmSystemLockPagesCount:
dq 0
align ALIGN_VALUE
_DATA$00 ends
end