370 lines
7.3 KiB
NASM
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
|