HalpHvInitMcaStatusMsrCache

VOID __stdcall HalpHvInitMcaStatusMsrCache(){
  unsigned __int64 v0; 
  void *v1; 
  int *v2; 
  int v3; 
  int v4; 
  __int64 v5; 
  int v6; 
  _HALP_ALLOC_CONTEXT *v7; 
  void *v8; 

  if( !byte_140C4A3B0 )
  {
    if( !byte_140C50568[0] )
    {
      v0 = __readmsr(0x179u);
      byte_140C50568[0] = v0;
    }
    v1 = (void *)(4i64 * byte_140C50568[0]);
    LODWORD(dword_140C4A3A8) = byte_140C50568[0];
    if( v1 )
    {
      qword_140C4A3C0 = (INT64)HalpMmAllocCtxAlloc((_HALP_ALLOC_CONTEXT *)byte_140C50568[0], 4i64 * byte_140C50568[0]);
      v2 = (int *)qword_140C4A3C0;
      if( !qword_140C4A3C0 )
        KeBugCheckEx(0xACu, v1, 0i64, "minkernel\\hals\\lib\\hv\\hvintel.c", (PVOID)0x613);
      if( (_DWORD)dword_140C4A3A8 )
      {
        v3 = 1025;
        v4 = -1073733631;
        v5 = (unsigned int)dword_140C4A3A8;
        do
        {
          if( HalpGetCpuVendor() != 1 || (v6 = v4, !HalpMcaScalableRasSupported) )
            v6 = v3;
          *v2 = v6;
          v4 += 16;
          ++v2;
          v3 += 4;
          --v5;
        }
        while( v5 );
      }
    }
    else
    {
      qword_140C4A3C0 = 0i64;
    }
    dword_140C4A3AC = HalpQueryMaximumRegisteredProcessorCount();
    v8 = (void *)(8 * (unsigned int)dword_140C4A3A8 * (unsigned __int64)dword_140C4A3AC);
    if( v8 )
    {
      qword_140C4A3B8 = (__int64)HalpMmAllocCtxAlloc(v7, (UINT64)v8);
      if( !qword_140C4A3B8 )
        KeBugCheckEx(0xACu, v8, 0i64, "minkernel\\hals\\lib\\hv\\hvintel.c", (PVOID)0x62D);
    }
    else
    {
      qword_140C4A3B8 = 0i64;
    }
    byte_140C4A3B0 = 1;
  }
}

Referenced by:

HalpMceInit