HalpDpPostReplaceInitialization
INT64 __fastcall HalpDpPostReplaceInitialization(INT64 *a1, UINT64 *a2){
DOUBLE v2;
int v3;
INT64 v6;
INT64 v7;
INT64 v8;
CHAR CpuInfo;
UINT8 v11;
v3 = *(_DWORD *)a1;
v11 = 0;
HalpInterruptReinitializeThisProcessor((INT64)a1, v2);
KeGetCurrentIrql();
__writecr8(0xFui64);
__writemsr(0x10u, *a2);
HalpMcaResumeProcessorConfig(1i64);
if( (HalpFeatureBits & 1) != 0 )
HalpInterruptEnablePerformanceEvents(0i64);
v8 = (unsigned int)_InterlockedExchangeAdd((volatile signed __int32 *)a1 + 15, 1u);
while( *((_DWORD *)a1 + 15) < v3 )
_mm_pause();
while( *((_DWORD *)a1 + 16) < (int)v8 )
_mm_pause();
HalpMcUpdateMicrocode(v8, v6, v7);
CpuInfo = HalpGetCpuInfo(0i64, 0i64, 0i64, &v11);
v11 &= -(CpuInfo != 0);
if( v11 == 1 )
{
if( *((_BYTE *)KeGetCurrentPrcb() + 64) == 15 )
__writemsr(0xC001001F, __readmsr(0xC001001F) & 0xFFFFFFFEFFEFFFFFui64 | 0x100000000i64);
if( *((_BYTE *)KeGetCurrentPrcb() + 64) == 18 )
__writemsr(0xC0011029, __readmsr(0xC0011029) | 0x80000000);
}
_InterlockedIncrement((volatile signed __int32 *)a1 + 16);
while( *((_DWORD *)a1 + 16) < v3 )
_mm_pause();
HalpRestartProfiling();
return HalpInterruptEnableNmi();
}Referenced by:
HalpDpOfflineProcessorForReplace