KiReadyThread

VOID __stdcall KiReadyThread(_KPRCB *Prcb, _ETHREAD *Thread){
  int v2; 
  int v5; 
  INT64 v6; 
  _EPROCESS *v7; 
  _BYTE *v8; 
  signed __int64 v9; 
  signed __int64 v10; 
  _EPROCESS *Process; 
  INT64 r8_0; 

  v2 = *(&Thread->Tcb.MiscFlags + 1);
  if( (v2 & 0x20000) != 0 )
  {
    if( (v2 & 0x100000) != 0 )
    {
      _interlockedbittestandreset((volatile signed __int32 *)&Thread->Tcb.116 + 1, 0x14u);
      if( (_InterlockedExchangeAdd(&Thread->Tcb.ApcState.Process->Pcb.StackCount.Value, 8u) & 7) != 0 )
      {
        Process = Thread->Tcb.ApcState.Process;
        KiAcquireKobjectLockSafe(Process);
        if( (Process->Pcb.StackCount.Value & 7) != 0 )
        {
          KiRequestProcessInSwap(&Thread->Tcb, &Process->Pcb);
          return;
        }
        _InterlockedAnd((volatile signed __int32 *)Process, 0xFFFFFF7F);
      }
    }
    v5 = (_DWORD)Thread + 216;
    v6 = 0i64;
    *(_QWORD *)Thread->Tcb.gapD8 = 0i64;
    while( 1 )
    {
      r8_0 = v6;
      KiDeferredReadySingleThread((INT64)Prcb, v5 - 216, (INT64)&r8_0);
      v5 = r8_0;
      if( !r8_0 )
        break;
      v6 = *(_QWORD *)r8_0;
    }
  }
  else
  {
    v7 = Thread->Tcb.ApcState.Process;
    KiAcquireKobjectLockSafe(v7);
    if( (v7->Pcb.StackCount.Value & 7) != 0 )
    {
      KiRequestProcessInSwap(&Thread->Tcb, &v7->Pcb);
    }
    else
    {
      _InterlockedExchangeAdd(&v7->Pcb.StackCount.Value, 8u);
      _InterlockedAnd((volatile signed __int32 *)v7, 0xFFFFFF7F);
      _interlockedbittestandreset((volatile signed __int32 *)&Thread->Tcb.116 + 1, 0x14u);
      Thread->Tcb.WaitBlockFill6[68] = 6;
      v8 = Thread->Tcb.gapD8;
      _m_prefetchw(&KiStackInSwapListHead);
      v9 = KiStackInSwapListHead;
      do
      {
        *(_QWORD *)v8 = v9;
        v10 = v9;
        v9 = _InterlockedCompareExchange64(&KiStackInSwapListHead, (signed __int64)v8, v9);
      }
      while( v9 != v10 );
      if( !v9 )
        KeSetEvent((PRKEVENT)&KiSwapEvent, 10, 0);
    }
  }
}

Referenced by:

KiProcessExpiredTimerList
KiProcessThreadWaitList
KiReadyOutSwappedThreads