CmpArmLazyWriter

void __fastcall CmpArmLazyWriter(int a1, unsigned __int64 *a2, char a3){
  unsigned __int64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  unsigned __int8 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  int v11; 
  unsigned __int64 v12; 
  ULONG v13; 
  __int64 v14; 
  if( CmpWorkerDataInitialized && !CmpHoldLazyFlush )
  {
    v4 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - KUSER_SHARED_DATA.InterruptTimeBias;
    if( a2 )
    {
      v5 = v4 + 10000000i64 * HIDWORD(CmpLazyWriterData[24 * a1 + 22]);
      v6 = *a2;
      if( *a2 >= v5 )
        v6 = v5;
    }
    else if( a3 )
    {
      v6 = v4 + 20000000;
    }
    else
    {
      v6 = 10000000i64 * HIDWORD(CmpLazyWriterData[24 * a1 + 22]) + v4;
    }
    v7 = 24i64 * a1;
    KeAcquireSpinLockRaiseToDpc((UINT64 *)&CmpLazyWriterData[v7 + 19], a1);
    v9 = v8;
    v10 = CmpLazyWriterData[v7 + 21] & 7;
    if( v10 > 3 )
      goto LABEL_9;
    if( (_DWORD)v10 == 1 )
    {
      if( a3 && KeCancelTimer((PKTIMER)&CmpLazyWriterData[v7]) )
        goto LABEL_23;
    }
    else
    {
      if( !(_DWORD)v10 )
      {
LABEL_23:
        v12 = 1i64;
LABEL_16:
        CmpLazyWriterData[v7 + 21] = v12;
        if( v12 == 1 )
        {
          if( a3 )
          {
            v14 = -20000000i64;
            v13 = 1000;
          }
          else
          {
            v13 = CmpLazyWriterData[v7 + 23];
            v14 = -10000000i64 * SHIDWORD(CmpLazyWriterData[v7 + 22]);
          }
          KeSetCoalescableTimer(
            (PKTIMER)&CmpLazyWriterData[v7],
            (LARGE_INTEGER)v14,
            0,
            v13,
            (PKDPC)&CmpLazyWriterData[v7 + 8]);
        }
        goto LABEL_9;
      }
      v11 = v10 - 2;
      if( !v11 || v11 == 1 && v6 < (CmpLazyWriterData[v7 + 21] & 0xFFFFFFFFFFFFFFF8ui64) )
      {
        v12 = v6 & 0xFFFFFFFFFFFFFFF8ui64 | 3;
        goto LABEL_16;
      }
    }
LABEL_9:
    KxReleaseSpinLock((UINT64 *)&CmpLazyWriterData[v7 + 19]);
    __writecr8(v9);
  }
}

Referenced by:

CmpEnableLazyFlush
CmpFlushHive
CmpRecheckHiveVolumePolicy
HvMarkBaseBlockDirty
HvpMarkDirty