200 lines
5.1 KiB
ArmAsm
200 lines
5.1 KiB
ArmAsm
|
// TITLE("High Frequency Spin Locks")
|
||
|
//++
|
||
|
//
|
||
|
// Copyright (c) 1993 Microsoft Corporation
|
||
|
// Copyright (c) 1993 Digital Equipment Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
//
|
||
|
// hifreqlk.s
|
||
|
//
|
||
|
// Abstract:
|
||
|
//
|
||
|
// This module contains storage for high frequency spin locks. Each
|
||
|
// is allocated to a separate cache line.
|
||
|
//
|
||
|
// Author:
|
||
|
//
|
||
|
// David N. Cutler (davec) 25-Jun-1993
|
||
|
// Joe Notarangelo 29-Nov-1993
|
||
|
//
|
||
|
// Environment:
|
||
|
//
|
||
|
// Kernel mode.
|
||
|
//
|
||
|
// Revision History:
|
||
|
//
|
||
|
//--
|
||
|
|
||
|
#include "ksalpha.h"
|
||
|
|
||
|
#if defined(NT_UP)
|
||
|
|
||
|
#define ALIGN
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define ALIGN .align 6
|
||
|
|
||
|
#endif
|
||
|
|
||
|
.sdata
|
||
|
ALIGN
|
||
|
.long 0
|
||
|
|
||
|
.globl CcMasterSpinLock
|
||
|
ALIGN
|
||
|
CcMasterSpinLock: // cache manager master lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl CcVacbSpinLock
|
||
|
ALIGN
|
||
|
CcVacbSpinLock: // cache manager VACB lock
|
||
|
.long 0
|
||
|
|
||
|
.globl ExpResourceSpinLock
|
||
|
ALIGN
|
||
|
ExpResourceSpinLock: // resource package lock
|
||
|
.long 0
|
||
|
|
||
|
.globl IopCancelSpinLock
|
||
|
ALIGN
|
||
|
IopCancelSpinLock: // I/O cancel lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl IopCompletionLock
|
||
|
ALIGN
|
||
|
IopCompletionLock: // I/O completion lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl IopDatabaseLock
|
||
|
ALIGN
|
||
|
IopDatabaseLock: // I/O database lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl IopVpbSpinLock
|
||
|
ALIGN
|
||
|
IopVpbSpinLock: // I/O VPB lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl IoStatisticsLock
|
||
|
ALIGN
|
||
|
IoStatisticsLock: // I/O statistics lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl IopFastLockSpinLock
|
||
|
ALIGN
|
||
|
IopFastLockSpinLock: // fast I/O path lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl KiContextSwapLock
|
||
|
ALIGN
|
||
|
KiContextSwapLock: // context swap lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl KiDispatcherLock
|
||
|
ALIGN
|
||
|
KiDispatcherLock: // dispatcher database lock
|
||
|
.long 0 //
|
||
|
|
||
|
.globl KiSynchIrql
|
||
|
KiSynchIrql: // synchronization IRQL
|
||
|
.long SYNCH_LEVEL //
|
||
|
|
||
|
.globl MmPfnLock
|
||
|
ALIGN
|
||
|
MmPfnLock: // page frame database lock
|
||
|
.long 0
|
||
|
|
||
|
.globl MmChargeCommitmentLock
|
||
|
ALIGN
|
||
|
MmChargeCommitmentLock: // charge commitment lock
|
||
|
.long 0
|
||
|
|
||
|
.globl NonPagedPoolLock
|
||
|
ALIGN
|
||
|
NonPagedPoolLock: // nonpage pool allocation lock
|
||
|
.long 0
|
||
|
|
||
|
//
|
||
|
// 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 6
|
||
|
.globl KeTickCount
|
||
|
KeTickCount: //
|
||
|
.long 0, 0
|
||
|
|
||
|
//
|
||
|
// KeMaximumIncrement - This is the maximum time between clock interrupts
|
||
|
// in 100ns units that is supported by the host HAL.
|
||
|
//
|
||
|
|
||
|
.globl KeMaximumIncrement
|
||
|
KeMaximumIncrement: //
|
||
|
.long 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.
|
||
|
//
|
||
|
|
||
|
.globl KeTimeAdjustment
|
||
|
KeTimeAdjustment: //
|
||
|
.long 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.
|
||
|
//
|
||
|
|
||
|
.globl KiTickOffset
|
||
|
KiTickOffset: //
|
||
|
.long 0
|
||
|
|
||
|
//
|
||
|
// KiMaximumDpcQueueDepth - This is used to control how many DPCs can be
|
||
|
// queued before a DPC of medium importance will trigger a dispatch
|
||
|
// interrupt.
|
||
|
//
|
||
|
|
||
|
.globl KiMaximumDpcQueueDepth
|
||
|
KiMaximumDpcQueueDepth: //
|
||
|
.long 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.
|
||
|
//
|
||
|
|
||
|
.globl KiMinimumDpcRate
|
||
|
KiMinimumDpcRate: //
|
||
|
.long 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.
|
||
|
//
|
||
|
|
||
|
.globl KiAdjustDpcThreshold
|
||
|
KiAdjustDpcThreshold: //
|
||
|
.long 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.
|
||
|
//
|
||
|
|
||
|
.globl KiIdealDpcRate
|
||
|
KiIdealDpcRate: //
|
||
|
.long 20
|