KiReadyThread

void __fastcall KiReadyThread(struct _KPRCB *a1, __int64 a2){
  int v2; 
  INT64 v5; 
  INT64 v6; 
  __int64 v7; 
  signed __int64 *v8; 
  signed __int64 v9; 
  signed __int64 v10; 
  __int64 v11; 
  INT64 a3; 
  v2 = *(_DWORD *)(a2 + 120);
  if( (v2 & 0x20000) != 0 )
  {
    if( (v2 & 0x100000) != 0 )
    {
      _interlockedbittestandreset((volatile signed __int32 *)(a2 + 120), 0x14u);
      if( (_InterlockedExchangeAdd((volatile signed __int32 *)(*(_QWORD *)(a2 + 184) + 840i64), 8u) & 7) != 0 )
      {
        v11 = *(_QWORD *)(a2 + 184);
        KiAcquireKobjectLockSafe((PVOID)v11);
        if( (*(_DWORD *)(v11 + 840) & 7) != 0 )
        {
          KiRequestProcessInSwap((_KTHREAD *)a2, (_KPROCESS *)v11);
          return;
        }
        _InterlockedAnd((volatile signed __int32 *)v11, 0xFFFFFF7F);
      }
    }
    v5 = a2 + 216;
    v6 = 0i64;
    *(_QWORD *)(a2 + 216) = 0i64;
    while( 1 )
    {
      a3 = v6;
      KiDeferredReadySingleThread((INT64)a1, v5 - 216, (INT64)&a3);
      v5 = a3;
      if( !a3 )
        break;
      v6 = *(_QWORD *)a3;
    }
  }
  else
  {
    v7 = *(_QWORD *)(a2 + 184);
    KiAcquireKobjectLockSafe((PVOID)v7);
    if( (*(_DWORD *)(v7 + 840) & 7) != 0 )
    {
      KiRequestProcessInSwap((_KTHREAD *)a2, (_KPROCESS *)v7);
    }
    else
    {
      _InterlockedExchangeAdd((volatile signed __int32 *)(v7 + 840), 8u);
      _InterlockedAnd((volatile signed __int32 *)v7, 0xFFFFFF7F);
      _interlockedbittestandreset((volatile signed __int32 *)(a2 + 120), 0x14u);
      *(_BYTE *)(a2 + 388) = 6;
      v8 = (signed __int64 *)(a2 + 216);
      _m_prefetchw(&KiStackInSwapListHead);
      v9 = KiStackInSwapListHead;
      do
      {
        *v8 = v9;
        v10 = v9;
        v9 = _InterlockedCompareExchange64(&KiStackInSwapListHead, (signed __int64)v8, v9);
      }
      while( v9 != v10 );
      if( !v9 )
        KeSetEvent(&KiSwapEvent, 10);
    }
  }
}

Referenced by:

KiProcessExpiredTimerList
KiProcessThreadWaitList
KiReadyOutSwappedThreads