PpmGetIdleGenerationCounter
UINT64 __stdcall PpmGetIdleGenerationCounter(_KPRCB *Prcb){
signed __int64 IdleTimeEntry;
signed __int64 v3;
UINT64 v4;
_m_prefetchw((const void *)&Prcb->PowerState.IdleTimeEntry);
IdleTimeEntry = Prcb->PowerState.IdleTimeEntry;
do
{
v3 = IdleTimeEntry;
IdleTimeEntry = _InterlockedCompareExchange64(
(volatile signed __int64 *)&Prcb->PowerState.IdleTimeEntry,
IdleTimeEntry,
IdleTimeEntry);
}
while( v3 != IdleTimeEntry );
v4 = IdleTimeEntry;
if( IdleTimeEntry && Prcb->PowerState.Hypervisor == ProcHypervisorHvCounters )
return(Prcb->StatisticsPage[DWORD2(xmmword_140CED0E0)] >> 1) & -(__int64)((Prcb->StatisticsPage[DWORD2(xmmword_140CED0E0)] & 1) != 0);
return v4;
}Referenced by:
PpmPerfApplyProcessorState