KxFlushNonGlobalTb

VOID __stdcall KxFlushNonGlobalTb(_KTBFLUSH_TARGET ProcessorSet){
  unsigned __int8 CurrentIrql; 
  struct _KPRCB *CurrentPrcb; 
  _KSTATIC_AFFINITY_BLOCK *p_StaticAffinity; 
  _IPI_TYPE v4; 
  int v5[8]; 

  CurrentIrql = KeGetCurrentIrql();
  __writecr8(0xCui64);
  CurrentPrcb = KeGetCurrentPrcb();
  if( ProcessorSet == FlushSubsetProcessors )
  {
    _InterlockedOr(v5, 0);
    p_StaticAffinity = &CurrentPrcb->StaticAffinity;
    KeCopyAffinityEx(
      &CurrentPrcb->StaticAffinity.KeFlushTbAffinity,
      (_KAFFINITY_EX *)&CurrentPrcb->CurrentThread->Tcb.ApcState.Process->Pcb.ActiveProcessors);
    KeRemoveProcessorAffinityEx(&CurrentPrcb->StaticAffinity.KeFlushTbAffinity.Count, CurrentPrcb->Number);
    v4 = IpiAffinity;
    goto LABEL_7;
  }
  p_StaticAffinity = 0i64;
  v4 = IpiAllButSelf;
  if( !KiKvaShadow )
  {
LABEL_7:
    KiIpiSendRequestEx(CurrentPrcb, v4, p_StaticAffinity, 0i64, 1ui64, (INT64)KiFlushProcessTbWorker, 0i64);
    goto LABEL_5;
  }
  if( KxSetTimeStampBusy((INT64 *)&KiTbFlushTimeStamp) )
  {
    KiIpiSendRequestEx(CurrentPrcb, IpiAllButSelf, 0i64, 0i64, 1ui64, (INT64)KiFlushProcessTbWorker, 0i64);
    _InterlockedAdd((volatile signed __int32 *)&KiTbFlushTimeStamp, 1u);
  }
LABEL_5:
  __writecr8(CurrentIrql);
}

Referenced by:

KeFlushTb