RtlUpdateSwapReference

VOID __stdcall RtlUpdateSwapReference(INT64 rcx0, CHAR a2){
  unsigned __int64 v4; 
  unsigned __int64 CompareAddress; 
  __int64 result[22]; 
  memset((INT64)result, 0i64);
  v4 = (unsigned __int64)_InterlockedExchange64((volatile __int64 *)rcx0, a2 & 1) >> 1;
  if( v4 )
  {
    PoCopyDeepIdleMask(result);
    KeSubtractAffinityEx(&KeActiveProcessors, (_KAFFINITY_EX *)result, (_KAFFINITY_EX *)result);
    KeRemoveProcessorAffinityEx((unsigned __int16 *)result, *((_DWORD *)KeGetPcr() + 105));
    KeGenericProcessorCallback(result, (void(__fastcall *)(struct _KPRCB *, __int64))xHalTimerWatchdogStop, 0i64, 0);
    for( CompareAddress = v4 + _InterlockedExchangeAdd64((volatile signed __int64 *)(rcx0 + 8), v4);
          CompareAddress;
          CompareAddress = *(_QWORD *)(rcx0 + 8) )
    {
      ExBlockOnAddressPushLock((_EX_PUSH_LOCK *)(rcx0 + 16), (volatile VOID *)(rcx0 + 8), &CompareAddress, 8ui64, 0i64);
    }
  }
}

Referenced by:

CmFcManagerStartRuntimePhase
CmFcpManagerDrainUsageNotifications
RtlpFcBufferManagerUpdateBuffers