PpmPerfApplyDomainState
UINT8 __stdcall PpmPerfApplyDomainState(_KPRCB *Master){
__int64 v1;
UINT8 v3;
_ETHREAD *NextThread;
CHAR PerfPolicyClass;
__int64 v6;
unsigned int KernelDr7;
char v8;
unsigned int v9;
int KernelDr6;
unsigned int v11;
INT64 *v12;
_KPRCB *v13;
unsigned int v14;
unsigned __int64 Base_high;
unsigned int v16;
unsigned int v17;
__int64 v18;
unsigned __int16 *v19;
char v20;
char *v22;
int v23;
unsigned int KernelDr6_high;
char v25;
unsigned int v26;
unsigned int v27;
unsigned int v28;
unsigned int v29;
unsigned int v30;
unsigned int v31;
unsigned int v32;
unsigned int v33;
unsigned int v34;
__int64 v35;
unsigned int v36;
unsigned int v37;
unsigned int v38;
bool v39;
unsigned int v40;
unsigned int v41;
char v42;
unsigned int v43;
unsigned int v44;
unsigned int v45;
int v46;
int v47;
char v48;
char v49;
int v50;
char v51;
char v52;
unsigned __int8 v53;
char v54;
UINT64 GuaranteedPercent;
int v56;
unsigned int v57;
unsigned int v58;
unsigned int v59;
unsigned int v60;
UINT64 MaxConstraint;
unsigned int v62;
unsigned int v63;
__int64 v64;
__int64 v65;
__int64 v66;
__int128 v67;
__int128 v68;
__int64 v69;
v69 = 0i64;
v1 = *(_QWORD *)&Master->ScbOffset;
v63 = 0;
v65 = 0i64;
v3 = 0;
v67 = 0i64;
v66 = *(_QWORD *)(v1 + 8);
v68 = 0i64;
v52 = 0;
v54 = 0;
NextThread = Master->NextThread;
v64 = 2736i64 * *(&stru_140C23628 + 441) + *(&stru_140C00F40 + 365) + 40i64;
PerfPolicyClass = PpmGetPerfPolicyClass(NextThread);
KernelDr7 = Master->ProcessorState.SpecialRegisters.KernelDr7;
v8 = 0;
v53 = PerfPolicyClass;
v9 = 100;
KernelDr6 = Master->ProcessorState.SpecialRegisters.KernelDr6;
v11 = v6;
LODWORD(GuaranteedPercent) = 100;
v58 = v6;
v51 = 0;
v57 = v6;
v60 = KernelDr6;
MaxConstraint = __PAIR64__(KernelDr7, KernelDr6);
HIDWORD(GuaranteedPercent) = KernelDr7;
if( PpmPerfArtificialDomainEnabled == (_DWORD)v6
|| (KeIsSubsetAffinityEx((_KAFFINITY_EX *)&Master->IdleThread, &PpmPerfNewCoreParkingMask),
KernelDr7 = HIDWORD(GuaranteedPercent),
v8 = 0,
v6 = 0i64,
v46)
|| *(_DWORD *)&Master->Group != v11 )
{
v12 = *(INT64 **)&Master->_MxCsr;
v13 = Master;
}
else
{
v13 = (_KPRCB *)PpmPerfDomainHead;
v12 = &PpmPerfDomainHead;
}
if( v13 != (_KPRCB *)v12 )
{
v14 = v11;
while( 1 )
{
Base_high = HIDWORD(v13->ProcessorState.SpecialRegisters.Idtr.Base);
if( v13 == Master )
goto LABEL_6;
if( !*(_DWORD *)&v13->Group )
{
KeIsSubsetAffinityEx((_KAFFINITY_EX *)&v13->IdleThread, &PpmPerfNewCoreParkingMask);
if( !v47 && Master->NextThread[-15].Tcb.ThreadLock == v13->NextThread[-15].Tcb.ThreadLock )
{
v48 = BYTE4(Master->GroupSetMember);
v49 = BYTE4(v13->GroupSetMember);
if( v48 == v49 || PpmPerfQosEnabled )
break;
}
}
LABEL_11:
v13 = *(_KPRCB **)&v13->_MxCsr;
if( v13 == (_KPRCB *)v12 )
{
v16 = MaxConstraint;
v6 = 0i64;
KernelDr7 = HIDWORD(MaxConstraint);
v8 = v51;
v57 = v14;
v9 = GuaranteedPercent;
v58 = v11;
HIDWORD(GuaranteedPercent) = HIDWORD(MaxConstraint);
v60 = MaxConstraint;
goto LABEL_13;
}
}
if( BYTE5(Master->GroupSetMember) != BYTE5(v13->GroupSetMember) )
{
Base_high = ((unsigned __int64)v13->ProcessorState.SpecialRegisters.Gdtr.Base * Base_high
+ ((unsigned __int64)v13->ProcessorState.SpecialRegisters.Gdtr.Base >> 1))
/ (unsigned __int64)Master->ProcessorState.SpecialRegisters.Gdtr.Base;
if( (unsigned int)Base_high > LODWORD(Master->ProcessorState.SpecialRegisters.KernelDr6) )
LODWORD(Base_high) = Master->ProcessorState.SpecialRegisters.KernelDr6;
}
if( v48 != v49 )
{
if( (unsigned int)Base_high <= v14 )
LODWORD(Base_high) = v14;
v14 = Base_high;
goto LABEL_11;
}
LABEL_6:
if( (unsigned int)Base_high <= v11 )
LODWORD(Base_high) = v11;
v11 = Base_high;
if( LOBYTE(v13->ProcessorState.SpecialRegisters._MxCsr) )
v51 = 1;
v52 |= PpmPerfApplyCapsAndFloors(
&MaxConstraint,
(UINT64 *)((char *)&MaxConstraint + 4),
&GuaranteedPercent,
(_PROC_PERF_DOMAIN *)v13);
goto LABEL_11;
}
v16 = v60;
LABEL_13:
v17 = v6;
v18 = v6;
while( 1 )
{
if( *((_DWORD *)&Master->ProcessorState.ContextFrame.P3Home + v18 + 1) )
{
v19 = (unsigned __int16 *)(&Master->ProcessorState.ContextFrame.P3Home + 4 * v17 + v17);
goto LABEL_17;
}
v56 = v6;
v22 = (char *)&Master->ProcessorState.SpecialRegisters.DebugControl + 28 * v18;
v23 = v6;
if( v22[21] )
{
KernelDr6_high = Master->ProcessorState.SpecialRegisters.KernelDr7;
v23 = 1;
v56 = 1;
}
else
{
KernelDr6_high = HIDWORD(Master->ProcessorState.SpecialRegisters.KernelDr6);
}
if( KernelDr6_high <= *((_DWORD *)v22 + 2) )
KernelDr6_high = *((_DWORD *)v22 + 2);
v25 = v22[22];
if( v25 )
{
v26 = Master->ProcessorState.SpecialRegisters.KernelDr6;
}
else
{
v23 |= 8u;
v26 = v9;
v56 = v23;
if( !PpmPerfBoostAtGuaranteed )
v26 = 100;
}
if( *(_DWORD *)v22 < 0x64u && v26 >= *(_DWORD *)v22 )
v26 = *(_DWORD *)v22;
if( v26 >= *((_DWORD *)v22 + 1) )
v26 = *((_DWORD *)v22 + 1);
if( *(&stru_140C23628 + 3472) )
{
v27 = 100;
}
else if( *(&PopIrpWorkerControlEvent + 315) )
{
v27 = (unsigned __int8)v22[23];
}
else if( v8 )
{
v27 = *(_DWORD *)(v64 + 4i64 * v53 + 112);
}
else
{
v27 = 0;
}
if( v27 >= v26 )
v27 = v26;
v28 = v27 > KernelDr6_high ? v27 : KernelDr6_high;
if( v28 < v9 )
{
v29 = KernelDr6_high;
if( v27 > KernelDr6_high )
v29 = v27;
}
else
{
v29 = v9;
}
if( v29 > KernelDr7 )
{
if( v27 > KernelDr6_high )
v30 = v27;
else
v30 = KernelDr6_high;
if( v30 < v9 )
{
KernelDr7 = KernelDr6_high;
if( v27 > KernelDr6_high )
KernelDr7 = v27;
}
else
{
KernelDr7 = v9;
}
}
v59 = KernelDr7;
v31 = v26 > KernelDr6_high ? v26 : KernelDr6_high;
if( v31 < v16 )
{
v32 = v26;
if( v26 <= KernelDr6_high )
v32 = KernelDr6_high;
}
else
{
v32 = v16;
}
if( v32 <= HIDWORD(GuaranteedPercent) )
{
v26 = HIDWORD(GuaranteedPercent);
}
else
{
v33 = v26 > KernelDr6_high ? v26 : KernelDr6_high;
if( v33 < v16 )
{
if( v26 <= KernelDr6_high )
v26 = KernelDr6_high;
}
else
{
v26 = v16;
}
}
if( *(&stru_140C23628 + 3472) )
{
v34 = v26;
v35 = v26;
}
else
{
if( v22[24] )
{
v34 = v58;
if( v58 <= v57 )
v34 = v57;
}
else
{
v34 = v58;
}
v35 = v34;
if( v34 > v26 )
{
v35 = v26;
v50 = v23 | 2;
if( !v52 )
v50 = v23;
v23 = v50;
v56 = v50;
goto LABEL_71;
}
}
if( v34 < KernelDr7 )
v35 = KernelDr7;
LABEL_71:
if( v25 == 2 || (unsigned __int8)(v25 - 4) <= 2u )
{
v36 = (unsigned __int8)(v25 - 5) <= 1u || PpmPerfBoostAtGuaranteed ? v9 : 100;
if( (unsigned int)v35 >= v36 )
v35 = v26;
}
if( *(&stru_140C23628 + 3472) )
v37 = 0;
else
v37 = *(_DWORD *)(v64 + 60);
v38 = v34 - v37;
v39 = v37 < v34;
v40 = KernelDr7;
if( !v39 )
v38 = 0;
if( v38 >= KernelDr7 )
v40 = v38;
v62 = v40;
if( v40 > v9 )
v62 = v9;
if( *(&stru_140C23628 + 3472) || *(&PopIrpWorkerControlEvent + 314) )
v41 = 0;
else
v41 = *((_DWORD *)v22 + 4);
if( v51 && v41 >= *(_DWORD *)(v64 + 4i64 * v53 + 104) )
v41 = *(_DWORD *)(v64 + 4i64 * v53 + 104);
v42 = v22[20];
if( !v42 )
v56 = v23 | 4;
v43 = ((__int64(__fastcall *)(__int64, __int64, _QWORD, _QWORD, unsigned int, _DWORD, int, unsigned int *, __int64 *))Master->ProcessorState.SpecialRegisters.Cr4)(
v66,
v35,
KernelDr7,
v26,
v41,
*((_DWORD *)v22 + 3),
v56,
&v63,
&v65);
v44 = v62;
if( v62 > v43 )
v44 = v43;
HIDWORD(v69) = v42 == 0;
*(_QWORD *)&v67 = v65;
*(_QWORD *)&v68 = __PAIR64__(v26, v59);
LODWORD(v69) = *((_DWORD *)v22 + 3);
*((_QWORD *)&v67 + 1) = __PAIR64__(v63, v43);
*((_QWORD *)&v68 + 1) = __PAIR64__(v41, v44);
if( !v17 && Master->ProcessorState.SpecialRegisters.KernelDr2 )
BYTE5(v69) = 1;
v3 = v54;
v19 = (unsigned __int16 *)&v67;
LABEL_17:
if( BYTE4(Master->ProcessorState.ContextFrame.Header[0].High)
|| (v20 = *((_BYTE *)v19 + 36), *((_BYTE *)&Master->ProcessorState.ContextFrame.Dr2 + 40 * v18 + 4) != v20)
|| *((_DWORD *)&Master->ProcessorState.ContextFrame.Dr0 + 10 * v18) != *((_DWORD *)v19 + 4)
|| *((_DWORD *)&Master->ProcessorState.ContextFrame.Dr0 + 10 * v18 + 1) != *((_DWORD *)v19 + 5)
|| *((_DWORD *)&Master->ProcessorState.ContextFrame.Dr1 + 10 * v18 + 1) != *((_DWORD *)v19 + 7) )
{
v9 = GuaranteedPercent;
LABEL_98:
v3 = 1;
v54 = 1;
*(_OWORD *)(&Master->ProcessorState.ContextFrame.SegCs + 20 * v18) = *(_OWORD *)v19;
*(_OWORD *)(&Master->ProcessorState.ContextFrame.Dr0 + 5 * v18) = *((_OWORD *)v19 + 1);
*(&Master->ProcessorState.ContextFrame.Dr2 + 5 * v18) = *((_QWORD *)v19 + 4);
goto LABEL_28;
}
v9 = GuaranteedPercent;
if( *((_DWORD *)&Master->ProcessorState.ContextFrame.Dr2 + 10 * v18) != *((_DWORD *)v19 + 8)
|| *((_QWORD *)&Master->ProcessorState.ContextFrame.SegCs + 5 * v18) != *(_QWORD *)v19
|| (_DWORD)GuaranteedPercent != *(_DWORD *)&Master->ProcessorState.SpecialRegisters.Tr
|| !v20
&& (*((_DWORD *)&Master->ProcessorState.ContextFrame.Dr1 + 10 * v18) != *((_DWORD *)v19 + 6)
|| *((_DWORD *)&Master->ProcessorState.ContextFrame.SegGs + 10 * v18) != *((_DWORD *)v19 + 2)) )
{
goto LABEL_98;
}
LABEL_28:
v16 = v60;
++v17;
KernelDr7 = HIDWORD(GuaranteedPercent);
++v18;
v8 = v51;
if( v17 >= 5 )
break;
LODWORD(v6) = 0;
}
if( v3 )
{
v45 = Master->ProcessorState.ContextFrame._MxCsr + 1;
if( Master->ProcessorState.ContextFrame._MxCsr == -1 )
v45 = 1;
*(_DWORD *)&Master->ProcessorState.SpecialRegisters.Tr = GuaranteedPercent;
Master->ProcessorState.ContextFrame._MxCsr = v45;
BYTE4(Master->ProcessorState.ContextFrame.Header[0].High) = 0;
Master->ProcessorState.ContextFrame.Header[0].Low = KeQueryPerformanceCounter(0i64);
Master->ProcessorState.ContextFrame.FltSave.ErrorOffset = 0;
PpmEventDomainPerfStateChange((_PROC_PERF_DOMAIN *)Master);
}
return v3;
}Referenced by:
PpmPerfApplyDomainStates