KeClearForceIdle

VOID __stdcall KeClearForceIdle(){
  INT64 v0; 
  EVENT_DESCRIPTOR *v1; 
  UINT64 SpinCount; 
  _disable();
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&KiForceIdleLock, 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( KiForceIdleLock );
  }
  if( KiForceIdleDisabled )
    goto LABEL_16;
  switch( (_DWORD)KiForceIdleState )
  {
    case 1:
      KiSetForceIdleState(0i64, v0, v1);
      KeRemoveQueueDpcEx((_KDPC *)&KiForceIdleStartDpc, 0);
      goto LABEL_15;
    case 2:
      KiSetForceIdleState(0i64, v0, v1);
      goto LABEL_15;
    case 3:
      if( !KiForceIdleStartTime )
        break;
LABEL_15:
      KiForceIdleStartTime = 0i64;
      break;
    case 4:
      KiResetForceIdle(3i64, 1);
      break;
  }
LABEL_16:
  _InterlockedAnd64(&KiForceIdleLock, 0i64);
  _enable();
}

Referenced by:

PopDeepSleepSetDisengageReason