KiInitializeCacheErrataSupport

UINT8 __stdcall KiInitializeCacheErrataSupport(UINT8 LastProcessor){
  unsigned int v3; 
  unsigned int *PoolWithTag; 
  unsigned int *v5; 
  unsigned int v6; 
  unsigned int *i; 
  if( KiTLBCOverride )
  {
    KiDisableCacheErrataSource();
    if( !LastProcessor )
      return 1;
LABEL_3:
    KiCacheErrataMonitor = 0i64;
    return 1;
  }
  if( !LastProcessor )
    return 1;
  v3 = KeNumberProcessors_0;
  if( (_DWORD)KeNumberProcessors_0 == 1 )
  {
    KiTLBCOverride = KeNumberProcessors_0;
    KiDisableCacheErrataSource();
    goto LABEL_3;
  }
  PoolWithTag = (unsigned int *)ExAllocatePoolWithTag(
                                  NonPagedPoolNx,
                                  16 * ((unsigned int)KeNumberProcessors_0 + 16i64),
                                  0x2020654Bui64);
  v5 = PoolWithTag;
  if( PoolWithTag )
  {
    *PoolWithTag = 0x393870 / v3;
    KeInitializeProfileCallback((INT64)(PoolWithTag + 2), (INT64)KiMonitorCacheErrata, 0i64, 0);
    v6 = 0;
    for( i = v5 + 64; v6 < v3; *(i - 1) = v6 % v3 )
    {
      *(_QWORD *)i = -1i64;
      i[2] = 0;
      i += 4;
      ++v6;
    }
    _InterlockedExchange64(&KiCacheErrataMonitor, (__int64)v5);
    KeSetIntervalProfile(*v5, ProfileTime);
    if( KeStartProfile((ULONG_PTR)(v5 + 2)) )
      return 1;
  }
  return 0;
}

Referenced by:

KiInitMachineDependent