HalpDmaReturnPageToOwner

void __fastcall HalpDmaReturnPageToOwner(__int64 a1, __int64 a2, unsigned __int64 a3){
  unsigned __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  bool v7; 
  *(_QWORD *)(a3 + 56) = a3;
  if( a1 )
  {
    v5 = *(_QWORD *)(a3 + 48);
    v6 = v5 & 4;
    if( *(_BYTE *)(a1 + 434) )
    {
      if( (v5 & 4) == 0 )
      {
        v4 = a3;
LABEL_9:
        HalpDmaReturnToScatterPool(a1, v4, 0);
        return;
      }
      v7 = (v5 & 8) == 0;
      a1 = a2;
      v4 = a3;
      if( !v7 )
        goto LABEL_9;
    }
    else
    {
      v4 = a3;
      if( v6 )
        a1 = a2;
    }
  }
  else
  {
    v4 = a3;
    a1 = a2;
    if( (*(_BYTE *)(a3 + 48) & 8) != 0 )
      goto LABEL_9;
  }
  HalpDmaReturnToContiguousPool(a1, v4, 0);
}

Referenced by:

HalpDmaAllocateMapRegisters
HalpDmaAllocateNewTranslationBuffer
HalpDmaFreeMapRegisters