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.