PopDripsWatchdogDiagnosticWorker

VOID __stdcall PopDripsWatchdogDiagnosticWorker(_ERESOURCE *Resource){
  INT64 v1; 
  unsigned int *p_ActiveEntries; 
  _ETHREAD *CurrentThread; 
  UINT64 *v5; 
  __int64 v6; 
  __int64 v7; 
  unsigned __int8 v8; 
  _LIST_ENTRY *Flink; 
  unsigned int v10; 
  _OWNER_ENTRY OwnerEntry; 
  unsigned int NumberOfSharedWaiters; 
  __int64 v13; 
  int Flink_high; 
  INT64 v15; 
  _ETHREAD *v16; 
  int v17; 
  int v18; 
  __int64 v19; 
  __int128 v20; 
  __int128 v21; 
  _POP_DRIPS_WATCHDOG_METRICS Metrics; 

  p_ActiveEntries = &Resource[3].ActiveEntries;
  memset(&Metrics, 0, sizeof(Metrics));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v20 = 0i64;
  --CurrentThread->Tcb.KernelApcDisable;
  v21 = 0i64;
  ExAcquireResourceExclusiveLite((UINT64)Resource, 1, v1);
  if( ((__int64)Resource[1].SystemResourcesList.Flink & 4) != 0 && (p_ActiveEntries[45] & 2) != 0 )
  {
    ++LODWORD(Resource[6].OwnerTable);
    v6 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
    v18 = 0;
    v19 = 0i64;
    v17 = 0;
    PopCalculateIdleInformation((__int64)&v20, v5);
    PopDripsWatchdogUpdateMetrics((__int64)Resource, v6, (__int64)&v20, &v18, &v19, &v17);
    v7 = 0i64;
    v8 = 0;
    if( (_QWORD)v21 != -1i64 )
    {
      Flink = Resource[6].SystemResourcesList.Flink;
      if( Flink != (_LIST_ENTRY *)-1i64 )
      {
        v8 = 1;
        v7 = v21 - (_QWORD)Flink;
      }
    }
    v10 = p_ActiveEntries[45];
    if( (v10 & 4) == 0 )
    {
      OwnerEntry = Resource[5].OwnerEntry;
      NumberOfSharedWaiters = Resource[5].NumberOfSharedWaiters;
      v13 = *(_QWORD *)&Resource[5].ActiveEntries;
      Flink_high = HIDWORD(Resource[1].SystemResourcesList.Flink);
      p_ActiveEntries[45] = v10 | 4;
      *(_OWNER_ENTRY *)&Metrics.NonDripsDurationMs = OwnerEntry;
      *(_DWORD *)&Metrics.OnAc = NumberOfSharedWaiters;
      *(_QWORD *)&Metrics.NonActivatedCpuTimeAsPercentage = v13;
      PopDripsWatchdogScheduleNextTimer((_KTIMER2 *)p_ActiveEntries);
      ExReleaseResourceLite(Resource);
      KeLeaveCriticalRegionThread(KeGetCurrentThread());
      if( v17 )
      {
        if( !v18 && PopDeepSleepEnabled() )
          PopDeepSleepWatchdogTakeAction(&Metrics, Flink_high);
      }
      else if( !qword_140C4FC98 )
      {
        PopDripsWatchdogTakeAction(&Metrics, Flink_high);
      }
      PopDiagTraceCsDripsDivergence(v8, v19, v7);
      if( v8 )
        PopDripsWatchdogCheckHwDivergence(v7, v19);
      v16 = (_ETHREAD *)KeGetCurrentThread();
      --v16->Tcb.KernelApcDisable;
      ExAcquireResourceExclusiveLite((UINT64)Resource, 1, v15);
      p_ActiveEntries[45] &= ~4u;
    }
  }
  ExReleaseResourceLite(Resource);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

No references.