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