KiGenerateHeteroSets
VOID __fastcall KiGenerateHeteroSets(
_KNODE *Node,
UINT64 AffinityMask,
_KHETERO_CPU_POLICY Policy,
UINT64 *IdealSetOut,
UINT64 *PreferredSetOut,
UINT64 *AvailableSetOut){
__int64 v6;
UINT64 v7;
UINT64 v8;
UINT64 v9;
v6 = Policy;
v7 = AffinityMask & Node->HeteroSets[v6].IdealMask;
v8 = AffinityMask & Node->HeteroSets[v6].PreferredMask;
v9 = AffinityMask & Node->HeteroSets[v6].AvailableMask;
if( v9 )
{
if( v8 )
{
AffinityMask &= Node->HeteroSets[v6].IdealMask;
if( !v7 )
AffinityMask = v8;
}
else
{
v8 = AffinityMask & Node->HeteroSets[v6].AvailableMask;
AffinityMask = v8;
}
}
else
{
v9 = AffinityMask;
v8 = AffinityMask;
}
*IdealSetOut = AffinityMask;
*PreferredSetOut = v8;
*AvailableSetOut = v9;
}Referenced by:
KeClockInterruptNotify
KiCheckPreferredHeteroProcessor
KiHeteroChooseTargetProcessor
KiSetHeteroPolicyThread