PpmHeteroDistributeUtility

UINT8 __stdcall PpmHeteroDistributeUtility(){
  unsigned int v0; 
  __int64 v1; 
  __int64 v2; 
  __int64 v3; 
  char v4; 
  unsigned __int16 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  int v9; 
  _PROC_PERF_CHECK *PerfCheck; 
  unsigned __int64 v11; 
  int v12; 
  _PROC_PERF_CHECK *v13; 
  char v14; 
  unsigned __int64 v15; 
  __int64 v16; 
  int v17; 
  _PROC_PERF_CHECK *v18; 
  int v19; 
  _PROC_PERF_CHECK *v20; 
  __int64 v22; 
  _KAFFINITY_ENUMERATION_CONTEXT Context; 
  UINT64 ProcIndex; 
  int v25; 
  __int64 v26; 

  memset(&Context, 0, sizeof(Context));
  v25 = 0;
  v0 = 0;
  v26 = *(&stru_140C00F40 + 365);
  v22 = 2736i64 * *(&stru_140C23628 + 441);
  if( (_DWORD)PpmParkNumNodes )
  {
    while( 1 )
    {
      v1 = PpmParkNodes + 272i64 * v0;
      if( PpmHeteroPolicy == 4 )
        break;
      PpmParkDistributeUtility();
LABEL_31:
      if( ++v0 >= (unsigned int)PpmParkNumNodes )
        return 1;
    }
    if( *(_BYTE *)(v1 + 143) && *(_BYTE *)(v1 + 144) )
    {
      if( !PpmHeteroImplementationGeneration )
        goto LABEL_12;
      if( !PpmHeteroParkBias || PpmHeteroParkBias == 2 || PpmHeteroParkBias == 3 )
        PpmParkDistributeUtility();
    }
    PpmParkDistributeUtility();
LABEL_12:
    v2 = *(_QWORD *)(v1 + 24);
    v3 = ~*(_QWORD *)(v1 + 32);
    if( (v2 & v3) != 0 )
    {
      v4 = 0;
      v5 = *(_WORD *)(v1 + 4);
      v6 = v2 & *(_QWORD *)(v1 + 40);
      LODWORD(ProcIndex) = 0;
      v7 = v3 & v6;
      Context.Affinity = 0i64;
      v8 = v26;
      Context.CurrentMask = v7;
      Context.CurrentIndex = v5;
      while( 1 )
      {
        KeEnumerateNextProcessor(&ProcIndex, &Context);
        if( v9 )
          break;
        PerfCheck = KeGetPrcb((unsigned int)ProcIndex)->PowerState.CheckContext.PerfCheck;
        if( PerfCheck )
        {
          v4 = *(_BYTE *)(v22 + v8 + 2762);
          PerfCheck->Class1MinimumPerfSelection = v4;
        }
      }
      Context.CurrentIndex = v5;
      v11 = v7 ^ *(_QWORD *)(v1 + 24);
      Context.Affinity = 0i64;
      Context.CurrentMask = v11;
      while( 1 )
      {
        KeEnumerateNextProcessor(&ProcIndex, &Context);
        if( v12 )
          break;
        v13 = KeGetPrcb((unsigned int)ProcIndex)->PowerState.CheckContext.PerfCheck;
        if( v13 )
          v13->Class1MinimumPerfSelection = 0;
      }
      v14 = 0;
      if( !PpmPerfQosEnabled )
      {
        v15 = *(_QWORD *)(v1 + 16) & v3;
        v16 = v26;
        Context.CurrentMask = v15;
        LODWORD(ProcIndex) = 0;
        Context.CurrentIndex = v5;
        Context.Affinity = 0i64;
        while( 1 )
        {
          KeEnumerateNextProcessor(&ProcIndex, &Context);
          if( v17 )
            break;
          v18 = KeGetPrcb((unsigned int)ProcIndex)->PowerState.CheckContext.PerfCheck;
          if( v18 )
          {
            v14 = *(_BYTE *)(v22 + v16 + 2761);
            v18->Class0FloorPerfSelection = v14;
          }
        }
        Context.CurrentIndex = v5;
        Context.CurrentMask = *(_QWORD *)(v1 + 16) ^ v15;
        Context.Affinity = 0i64;
        while( 1 )
        {
          KeEnumerateNextProcessor(&ProcIndex, &Context);
          if( v19 )
            break;
          v20 = KeGetPrcb((unsigned int)ProcIndex)->PowerState.CheckContext.PerfCheck;
          if( v20 )
            v20->Class0FloorPerfSelection = 0;
        }
      }
      PpmEventTraceHeteroDistributeUtility(v1, v14, v4);
    }
    goto LABEL_31;
  }
  return 1;
}

Referenced by:

No references.