KeReleaseInStackQueuedSpinLock
VOID *__stdcall KeReleaseInStackQueuedSpinLock(PKLOCK_QUEUE_HANDLE LockHandle){
_KSPIN_LOCK_QUEUE *volatile Next;
VOID *result;
_m_prefetchw(LockHandle);
Next = LockHandle->LockQueue.Next;
if( LockHandle->LockQueue.Next )
goto LABEL_5;
if( LockHandle != (PKLOCK_QUEUE_HANDLE)_InterlockedCompareExchange64(
(volatile signed __int64 *)LockHandle->LockQueue.Lock,
0i64,
(signed __int64)LockHandle) )
{
Next = KxWaitForLockChainValid(&LockHandle->LockQueue);
LABEL_5:
LockHandle->LockQueue.Next = 0i64;
_InterlockedXor64((volatile signed __int64 *)&Next->Lock, 1ui64);
}
result = (VOID *)(unsigned int)KiIrqlFlags;
__writecr8(LockHandle->OldIrql);
return result;
}Referenced by:
CcFlushCachePriv
CcMapAndCopyInToCache
CcSetFileSizesEx
ExpDeleteWorkerFactory
KiAddProcessorToGroupSchedulingDatabase
MiAddPartitionHugeRange
MiMarkHugePfnBad
MiMarkHugePfnGood
MiReleasePartitionHugeIoSpace
PnprMarkOrMirrorPages
PopAllocateIrp
PopIrpWorker