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.
305 lines
7.7 KiB
305 lines
7.7 KiB
// TITLE("High Frequency Spin Locks")
|
|
//++
|
|
//
|
|
// Module Name:
|
|
//
|
|
// hifreqlk.s
|
|
//
|
|
// Abstract:
|
|
//
|
|
// This module contains storage for high frequency spin locks. Each
|
|
// is allocated to a separate cache line.
|
|
//
|
|
// Author:
|
|
//
|
|
// William K. Cheung (wcheung) 29-Sep-1995
|
|
//
|
|
// based on David N. Cutler (davec) 25-Jun-1993
|
|
//
|
|
// Environment:
|
|
//
|
|
// Kernel mode.
|
|
//
|
|
// Revision History:
|
|
//
|
|
//--
|
|
|
|
#include "ksia64.h"
|
|
|
|
#if defined(NT_UP)
|
|
|
|
#define ALIGN .##align 8
|
|
#define ALIGN_SLIST .##align 16
|
|
|
|
#else
|
|
|
|
#define ALIGN .##align 128
|
|
#define ALIGN_SLIST ALIGN
|
|
|
|
#endif
|
|
|
|
#define SPIN_LOCK data8 0
|
|
|
|
.sdata
|
|
ALIGN
|
|
SPIN_LOCK
|
|
|
|
.global AfdWorkQueueSpinLock
|
|
ALIGN
|
|
AfdWorkQueueSpinLock: // AFD work queue lock
|
|
SPIN_LOCK
|
|
|
|
.global CcBcbSpinLock
|
|
ALIGN
|
|
CcBcbSpinLock: // cache manager BCB lock
|
|
SPIN_LOCK
|
|
|
|
.global CcMasterSpinLock
|
|
ALIGN
|
|
CcMasterSpinLock: // cache manager master lock
|
|
SPIN_LOCK
|
|
|
|
.global CcVacbSpinLock
|
|
ALIGN
|
|
CcVacbSpinLock: // cache manager VACB lock
|
|
SPIN_LOCK
|
|
|
|
.global ExpResourceSpinLock
|
|
ALIGN
|
|
ExpResourceSpinLock: // resource package lock
|
|
SPIN_LOCK
|
|
|
|
.global IopCancelSpinLock
|
|
ALIGN
|
|
IopCancelSpinLock: // I/O cancel lock
|
|
SPIN_LOCK
|
|
|
|
.global IopCompletionLock
|
|
ALIGN
|
|
IopCompletionLock: // I/O completion lock
|
|
SPIN_LOCK
|
|
|
|
.global IopDatabaseLock
|
|
ALIGN
|
|
IopDatabaseLock: // I/O database lock
|
|
SPIN_LOCK
|
|
|
|
.global IopVpbSpinLock
|
|
ALIGN
|
|
IopVpbSpinLock: // I/O VPB lock
|
|
SPIN_LOCK
|
|
|
|
.global IoStatisticsLock
|
|
ALIGN
|
|
IoStatisticsLock: // I/O statistics lock
|
|
SPIN_LOCK
|
|
|
|
.global KiDispatcherLock
|
|
ALIGN
|
|
KiDispatcherLock: // dispatcher database lock
|
|
SPIN_LOCK
|
|
|
|
|
|
.global MmPfnLock
|
|
ALIGN
|
|
MmPfnLock: // page frame database lock
|
|
SPIN_LOCK
|
|
|
|
.global NonPagedPoolLock
|
|
ALIGN
|
|
NonPagedPoolLock: // nonpage pool allocation lock
|
|
SPIN_LOCK
|
|
|
|
.global MmNonPagedPoolLock
|
|
ALIGN
|
|
MmNonPagedPoolLock: // Mm nonpage pool allocation lock
|
|
SPIN_LOCK
|
|
|
|
.global NtfsStructLock
|
|
ALIGN
|
|
NtfsStructLock: // NTFS structure lock
|
|
SPIN_LOCK
|
|
|
|
//
|
|
// The following fields are updated rarely.
|
|
//
|
|
|
|
ALIGN
|
|
.global KiMasterSequence // master sequence number
|
|
KiMasterSequence:
|
|
data8 START_SEQUENCE
|
|
|
|
.global KiMasterRid // master region ID
|
|
KiMasterRid:
|
|
data4 START_PROCESS_RID
|
|
|
|
//
|
|
// 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
|
|
.global KeTickCount
|
|
KeTickCount:
|
|
data8 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.
|
|
//
|
|
|
|
.global KiTickOffset
|
|
KiTickOffset:
|
|
data4 0
|
|
|
|
//
|
|
// The following fields are static for the life of the system.
|
|
//
|
|
|
|
.global KiSynchIrql
|
|
KiSynchIrql: // synchronization IRQL
|
|
data4 SYNCH_LEVEL //
|
|
|
|
//
|
|
// KiTimeIncrementReciprocal - This is the reciprocal fraction of the time
|
|
// increment value that is specified by the HAL when the system is
|
|
// booted.
|
|
//
|
|
|
|
.global KiTimeIncrementReciprocal
|
|
KiTimeIncrementReciprocal:
|
|
data8 0
|
|
|
|
//
|
|
// KiTimeIncrementShiftCount - This is the shift count that corresponds to
|
|
// the time increment reciprocal value.
|
|
//
|
|
|
|
|
|
.global KiTimeIncrementShiftCount
|
|
KiTimeIncrementShiftCount:
|
|
data4 0
|
|
|
|
|
|
//
|
|
// KeMaximumIncrement - This is the maximum time between clock interrupts
|
|
// in 100ns units that is supported by the host HAL.
|
|
//
|
|
|
|
.global KeMaximumIncrement
|
|
KeMaximumIncrement: //
|
|
data4 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.
|
|
//
|
|
|
|
.global KeTimeAdjustment
|
|
KeTimeAdjustment: //
|
|
data4 0
|
|
|
|
//
|
|
// KiMaximumDpcQueueDepth - This is used to control how many DPCs can be
|
|
// queued before a DPC of medium importance will trigger a dispatch
|
|
// interrupt.
|
|
//
|
|
|
|
ALIGN
|
|
.global KiMaximumDpcQueueDepth
|
|
KiMaximumDpcQueueDepth: //
|
|
data4 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.
|
|
//
|
|
|
|
.global KiMinimumDpcRate
|
|
KiMinimumDpcRate: //
|
|
data4 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.
|
|
//
|
|
|
|
.global KiAdjustDpcThreshold
|
|
KiAdjustDpcThreshold: //
|
|
data4 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.
|
|
//
|
|
|
|
.global KiIdealDpcRate
|
|
KiIdealDpcRate: //
|
|
data4 20
|
|
|
|
//
|
|
// KiTbFlushTimeStamp - This is the TB flush entire time stamp counter.
|
|
//
|
|
|
|
ALIGN
|
|
.global KiTbFlushTimeStamp
|
|
KiTbFlushTimeStamp: //
|
|
data4 0
|
|
|
|
//
|
|
// The following data is frequently updated together and always
|
|
// under the ownership of the dispatcher database lock.
|
|
//
|
|
|
|
ALIGN
|
|
.global KiIdleSummary
|
|
KiIdleSummary:
|
|
data8 0
|
|
|
|
.global PoSleepingSummary
|
|
PoSleepingSummary:
|
|
data8 0
|
|
|
|
//
|
|
// MmPfnDereferenceSListHead - This is used to store free blocks used for
|
|
// deferred PFN reference count releasing.
|
|
//
|
|
|
|
ALIGN_SLIST
|
|
.global MmPfnDereferenceSListHead
|
|
MmPfnDereferenceSListHead:
|
|
data8 0
|
|
data8 0
|
|
|
|
//
|
|
// MmPfnDeferredList - This is used to queue items that need reference count
|
|
// decrement processing.
|
|
//
|
|
|
|
ALIGN
|
|
.global MmPfnDeferredList
|
|
MmPfnDeferredList:
|
|
data8 0
|
|
|
|
//
|
|
// MmSystemLockPagesCount - This is the count of the number of locked pages
|
|
// in the system.
|
|
//
|
|
|
|
ALIGN
|
|
.global MmSystemLockPagesCount
|
|
MmSystemLockPagesCount:
|
|
data8 0
|
|
|
|
ALIGN
|
|
data8 0
|
|
|
|
|