PopFxIdleWorker

VOID __stdcall PopFxIdleWorker(POP_FX_DEVICE *FxDevice, UINT64 Component, PEP_WORK_INFORMATION *WorkInfo){
  unsigned int v4; 
  __int64 v6; 
  unsigned __int64 v7; 
  char v8; 
  void(__fastcall *v9)(_QWORD, _QWORD); 

  v4 = Component;
  v6 = *(_QWORD *)(*((_QWORD *)FxDevice + 104) + 8i64 * (unsigned int)Component);
  v7 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(v6 + 128));
  if( _InterlockedCompareExchange((volatile signed __int32 *)(v6 + 88), 0x40000000, 0x80000000) != 0x80000000 )
  {
    KxReleaseSpinLock((UINT64 *)(v6 + 128));
    __writecr8(v7);
    return;
  }
  KeResetEvent((_KEVENT *)(v6 + 104));
  *(_DWORD *)(v6 + 136) = 2;
  v8 = 0;
  v9 = (void(__fastcall *)(_QWORD, _QWORD))*((_QWORD *)FxDevice + 15);
  if( !v9 )
  {
    _InterlockedExchangeAdd((volatile signed __int32 *)(v6 + 136), 0xFFFFFFFE);
    goto LABEL_4;
  }
  v9(*((_QWORD *)FxDevice + 24), v4);
  if( _InterlockedExchangeAdd((volatile signed __int32 *)(v6 + 136), 0xFFFFFFFF) == 1 )
  {
LABEL_4:
    v8 = 1;
    goto LABEL_5;
  }
  PopFxAddLogEntry(*((_QWORD *)FxDevice + 6), v4, 13, 0i64);
LABEL_5:
  KxReleaseSpinLock((UINT64 *)(v6 + 128));
  __writecr8(v7);
  if( v8 )
    PopFxIdleWorkerTail(FxDevice, v4, WorkInfo);
}

Referenced by:

PopFxComponentWork
PopFxIdleComponent