HalpPostSleepMP
VOID __stdcall HalpPostSleepMP(INT64 NumberProcessors){
__int64 v1;
BOOL IsReferenceTscConfigured;
INT64 v3;
INT64 v4;
INT64 v5;
int v6;
__int64 v7;
v7 = v1;
v6 = NumberProcessors;
LODWORD(v7) = KeGetCurrentPrcb()->Number;
if( (_DWORD)v7 )
{
HalpInterruptReinitializeThisProcessor();
while( (_DWORD)v7 != *(&CmpDummyThreadEvent + 962) )
_mm_pause();
__writecr8(0xFui64);
}
if( (dword_140C4A10C & 0xC) != 0 )
HalpMcaResumeProcessorConfig(0i64);
if( (dword_140C4A10C & 1) != 0 )
HalpInterruptEnablePerformanceEvents(0i64);
IsReferenceTscConfigured = HalpHvIsReferenceTscConfigured();
if( !(_DWORD)v7 )
{
HIDWORD(qword_140C50410) = 0;
dword_140C503F0[0] = 0;
dword_140C503FC = v6 - 1;
qword_140C50408 = (__int64)dword_140C503F0;
if( !IsReferenceTscConfigured )
HalpTscInitializeSynchronizationContext((__int64)&unk_140CED090, 0, 0i64, &v6);
}
_InterlockedIncrement((_DWORD *)&CmpDummyThreadEvent + 962);
while( *(&CmpDummyThreadEvent + 962) != v6 )
;
if( !(_DWORD)v7 && byte_140C4A110 && HalpMceEnabled )
HalpHvSetMachineCheckHandlerState();
if( !(_DWORD)v7 )
HalpSetResumeTime(0i64, 1);
HalpTimerMarkWake();
HalpTimerRestoreProcessorCounter(v3);
if( !(_DWORD)v7 )
{
dword_140C49D0C = 1;
HalpSetResumeTime(0i64, 2);
HalpInterruptRestoreClock();
byte_140C4A108 = 0;
LODWORD(qword_140C50410) = 0;
}
_InterlockedIncrement((_DWORD *)&qword_140C50410 + 1);
while( HIDWORD(qword_140C50410) != v6 )
;
while( (int)qword_140C50410 < (int)v7 )
;
HalpMcUpdateMicrocode((unsigned int)qword_140C50410, v4, v5);
HalpErrataApplyPerProcessor();
_InterlockedIncrement((volatile signed __int32 *)&qword_140C50410);
while( (_DWORD)qword_140C50410 != v6 )
;
HalpRestartProfiling();
HalpInterruptEnableNmi();
KeLoadMTRR((INT64)&unk_140C503F8);
if( !IsReferenceTscConfigured )
HalpTscSynchronizationWorker(&unk_140CED090);
HalpMcaResumeProcessorConfig(1i64);
}Referenced by:
HaliAcpiSleep