PpmIdleCompleteExitLatencyTrace
VOID __stdcall PpmIdleCompleteExitLatencyTrace(
_KPRCB *Prcb,
INT64 Status,
UINT8 NonInterruptibleTransition,
UINT64 ExitTime,
UINT64 TraceFlags,
UINT64 ProcessorState,
UINT64 PlatformState,
UINT64 LatencyTraceFlags){
_KPRCB *v8;
volatile unsigned __int64 InitiateWakeStamp;
int v10;
_PPM_IDLE_STATES *IdleStates;
UINT64 *ExitTimea;
UINT64 ProcessorStateIndex;
ProcessorStateIndex = ExitTime;
v8 = Prcb;
if( (int)Status < 0 )
goto LABEL_8;
if( NonInterruptibleTransition
&& (InitiateWakeStamp = Prcb->PowerState.IdleStates->InitiateWakeStamp, ProcessorStateIndex > InitiateWakeStamp) )
{
v10 = PpmConvertTime(ProcessorStateIndex - InitiateWakeStamp, PopQpcFrequency, 0x989680ui64);
}
else
{
v10 = TraceFlags;
}
LODWORD(ExitTimea) = v10;
if( !(unsigned __int8)PpmTraceExitLatency(
(PPM_IDLE_STATES *)&ProcessorStateIndex,
(unsigned int)PlatformState,
(unsigned int)LatencyTraceFlags,
(unsigned int)ProcessorState,
(UINT64)ExitTimea,
&ProcessorStateIndex) )
{
Prcb = v8;
LABEL_8:
PpmCancelExitLatencyTrace(Prcb);
return;
}
IdleStates = v8->PowerState.IdleStates;
IdleStates->ExitLatencyTraceEnabled = 0;
IdleStates->InitiateWakeStamp = 0i64;
}Referenced by:
PpmIdleExecuteTransition