KiAbCpuBoostOwners
VOID __stdcall KiAbCpuBoostOwners(
_KLOCK_ENTRY *HeadEntry,
CHAR CpuPriority,
_SINGLE_LIST_ENTRY *ReadyList,
_SINGLE_LIST_ENTRY *PropagateBoostsList,
_SINGLE_LIST_ENTRY *SelfBoostsList){
_KLOCK_ENTRY *Min;
_SINGLE_LIST_ENTRY *v9;
_KLOCK_ENTRY *v11;
_KLOCK_ENTRY *v12;
_KLOCK_ENTRY *v13;
UINT64 BoostOutstandingIOsRequired;
_AB_PRIORITY Priority;
LODWORD(BoostOutstandingIOsRequired) = 0;
Priority = 0;
Min = (_KLOCK_ENTRY *)HeadEntry->OwnerTree.Min;
v9 = SelfBoostsList;
Priority.CpuPriority = CpuPriority;
while( Min && Min->CpuPriorityKey < CpuPriority )
{
KiAbSetMinimumThreadPriority(Min, &Priority, ReadyList, PropagateBoostsList, v9, &BoostOutstandingIOsRequired);
v11 = (_KLOCK_ENTRY *)Min->TreeNode.Children[1];
v12 = Min;
Min->CpuPriorityKey = CpuPriority;
if( v11 )
{
v13 = (_KLOCK_ENTRY *)v11->TreeNode.Children[0];
Min = v11;
if( v11->TreeNode.Children[0] )
{
do
{
Min = v13;
v13 = (_KLOCK_ENTRY *)v13->TreeNode.Children[0];
}
while( v13 );
}
}
else
{
while( 1 )
{
Min = (_KLOCK_ENTRY *)(Min->TreeNode.ParentValue & 0xFFFFFFFFFFFFFFFCui64);
if( !Min || (_KLOCK_ENTRY *)Min->TreeNode.Children[0] == v12 )
break;
v12 = Min;
}
}
}
if( (HeadEntry->ThreadLocalFlags & 1) == 0 )
KiAbSetMinimumThreadPriority(HeadEntry, &Priority, ReadyList, PropagateBoostsList, v9, &BoostOutstandingIOsRequired);
}Referenced by:
KiAbForceProcessLockEntry
KiAbProcessContextSwitch
KiAbProcessThreadLocks