PpmIdleCheckCoordinatedDependencies
UINT64 __stdcall PpmIdleCheckCoordinatedDependencies(
_KPRCB *Prcb,
UINT64 PreselectState,
UINT64 EntryPriority,
UINT64 RemainingLatency,
UINT64 ExpectedIdle,
UINT64 Dependencies,
_PPM_SELECTION_DEPENDENCY *DependencyList,
UINT64 *ProcessorState,
_PPM_COORDINATED_SELECTION *CoordinatedSelection,
_KAFFINITY_EX *SecondaryMask){
unsigned int v10;
unsigned int v11;
unsigned int v12;
_PPM_SELECTION_MENU *Menu;
_KAFFINITY_EX *v15;
UINT64 Entries_low;
UINT64 result;
_KPRCB *v18;
UINT64 EntryPrioritya;
int v20;
v20 = EntryPriority;
v10 = 0;
v11 = RemainingLatency;
v12 = PreselectState;
if( !(_DWORD)Dependencies )
return 0i64;
Menu = &DependencyList->Menu;
v15 = SecondaryMask;
while( 1 )
{
Entries_low = LODWORD(Menu[-1].Entries);
if( (_DWORD)Entries_low == -1 )
{
LODWORD(EntryPrioritya) = EntryPriority;
result = PpmIdleCheckCoordinatedDependency(
Prcb,
v12,
v11,
ExpectedIdle,
EntryPrioritya,
Menu,
ProcessorState,
CoordinatedSelection,
v15);
}
else if( (_DWORD)Entries_low == Prcb->Number )
{
result = PpmIdleSelectCoordinatedProcessorDependency(Prcb, v12, v11, ExpectedIdle, Menu, ProcessorState);
}
else
{
v18 = KeGetPrcb(Entries_low);
if( PpmTestAndLockProcessor(v18, SecondaryMask, Menu) >= 0 )
result = *(_BYTE *)(PpmPlatformStates + 12)
&& v18->PowerState.IdleStates->State[v18->PowerState.TargetIdleState].Latency > v11 ? 2147483650i64 : 0i64;
else
result = 2147483653i64;
v15 = SecondaryMask;
}
if( result )
break;
LODWORD(EntryPriority) = v20;
++v10;
Menu = (_PPM_SELECTION_MENU *)((char *)Menu + 24);
if( v10 >= (unsigned int)Dependencies )
return 0i64;
}
return result;
}Referenced by:
PpmIdleCheckCoordinatedDependency
PpmIdleCheckCoordinatedStateEligibility