HalpPostSleepMP
VOID __stdcall HalpPostSleepMP(INT64 NumberProcessors){
__int64 v1;
DOUBLE v2;
struct _KPRCB *CurrentPrcb;
INT64 v4;
bool IsReferenceTscConfigured;
INT64 v6;
INT64 v7;
INT64 v8;
int a4;
__int64 v10;
v10 = v1;
a4 = NumberProcessors;
CurrentPrcb = KeGetCurrentPrcb();
v4 = *((unsigned int *)CurrentPrcb + 9);
LODWORD(v10) = *((_DWORD *)CurrentPrcb + 9);
if( (_DWORD)v10 )
{
HalpInterruptReinitializeThisProcessor(v4, v2);
while( (_DWORD)v10 != HalpBarrier )
_mm_pause();
__writecr8(0xFui64);
}
if( (HalpFeatureBits & 0xC) != 0 )
HalpMcaResumeProcessorConfig(0i64);
if( (HalpFeatureBits & 1) != 0 )
HalpInterruptEnablePerformanceEvents(0i64);
IsReferenceTscConfigured = HalpHvIsReferenceTscConfigured();
if( !(_DWORD)v10 )
{
dword_140C50414 = 0;
dword_140C503F0 = 0;
dword_140C503FC = a4 - 1;
qword_140C50408 = (__int64)&dword_140C503F0;
if( !IsReferenceTscConfigured )
HalpTscInitializeSynchronizationContext((INT64)&Argument, 0, 0i64, &a4);
}
_InterlockedIncrement(&HalpBarrier);
while( HalpBarrier != a4 )
;
if( !(_DWORD)v10 && HalpHvWheaEnlightenedCpuManager && HalpMceEnabled )
HalpHvSetMachineCheckHandlerState();
if( !(_DWORD)v10 )
HalpSetResumeTime(0i64, 1);
HalpTimerMarkWake();
HalpTimerRestoreProcessorCounter(v6);
if( !(_DWORD)v10 )
{
SystemPowerPhase = 1;
HalpSetResumeTime(0i64, 2);
HalpInterruptRestoreClock();
HalpHiberInProgress = 0;
LODWORD(dword_140C50410) = 0;
}
_InterlockedIncrement(&dword_140C50414);
while( dword_140C50414 != a4 )
;
while( (int)dword_140C50410 < (int)v10 )
;
HalpMcUpdateMicrocode((unsigned int)dword_140C50410, v7, v8);
HalpErrataApplyPerProcessor();
_InterlockedIncrement((volatile signed __int32 *)&dword_140C50410);
while( (_DWORD)dword_140C50410 != a4 )
;
HalpRestartProfiling();
HalpInterruptEnableNmi();
KeLoadMTRR((INT64)&byte_140C503F8);
if( !IsReferenceTscConfigured )
HalpTscSynchronizationWorker(&Argument);
HalpMcaResumeProcessorConfig(1i64);
}Referenced by:
HaliAcpiSleep