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