KiFastReadyThread

VOID __stdcall KiFastReadyThread(_ETHREAD *Thread){
  UINT8 CurrentIrql; 
  _KPRCB *CurrentPrcb; 
  INT64 v4; 
  UINT64 SpinCount; 
  _SINGLE_LIST_ENTRY ReadyList; 

  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  CurrentPrcb = KeGetCurrentPrcb();
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( Thread->Tcb.ThreadLock );
  }
  KiEnterDeferredReadyState((INT64)Thread);
  KiReleaseThreadLockSafe(v4);
  *(_QWORD *)Thread->Tcb.gapD8 = 0i64;
  ReadyList.Next = (_SINGLE_LIST_ENTRY *)Thread->Tcb.gapD8;
  KiReadyDeferredReadyList(CurrentPrcb, &ReadyList);
  KiCheckForThreadDispatch(CurrentPrcb, CurrentIrql);
}

Referenced by:

KeReadyThread
KiInSwapKernelStacks