KiUpdateThreadCpuSetAffinitiesFromDpcLevel

VOID __stdcall KiUpdateThreadCpuSetAffinitiesFromDpcLevel(_ETHREAD *Thread, _SINGLE_LIST_ENTRY *ReadyList){
  int IdealProcessor; 
  _KPRCB *updated; 
  int v6; 
  _KPRCB *v7; 
  UINT64 Number; 
  UINT64 SpinCount; 

  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( Thread->Tcb.ThreadLock );
  }
  IdealProcessor = Thread->Tcb.IdealProcessor;
  updated = KiUpdateThreadCpuSets(&Thread->Tcb, ReadyList);
  v6 = Thread->Tcb.IdealProcessor;
  v7 = updated;
  KiReleaseThreadLockSafe((INT64)Thread);
  if( (xmmword_140CFB490 & 0x8000000) != 0 )
    EtwTraceIdealProcessor((__int64)Thread, 0x546u, IdealProcessor, v6);
  if( v7 )
  {
    Number = v7->Number;
    if( KeGetPcr()->Prcb.Number != (_DWORD)Number )
      KiSendSoftwareInterrupt(Number, 2u);
  }
}

Referenced by:

KeUpdateThreadCpuSets
KiUpdateThreadCpuSetAffinitiesProcess