HalpDmaReturnToScatterPool

VOID __stdcall HalpDmaReturnToScatterPool(
        _HALP_DMA_ADAPTER_OBJECT *Adapter,
        _HALP_DMA_TRANSLATION_ENTRY *Translation,
        INT64 TrackUsage){
  char v3; 
  unsigned __int8 CurrentIrql; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  v3 = TrackUsage;
  CurrentIrql = KeGetCurrentIrql();
  if( CurrentIrql != 15 )
    KeAcquireInStackQueuedSpinLock(&Adapter->SpinLock, &LockHandle);
  Translation->Next = Adapter->ScatterBufferListHead;
  ++Adapter->NumberOfFreeScatterBuffers;
  Adapter->ScatterBufferListHead = Translation;
  if( v3 )
    ++LODWORD(Adapter[1].ContiguousTranslationEnd.Buffer);
  if( CurrentIrql != 15 )
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
}

Referenced by:

HalpDmaReturnPageToOwner
HalpDmaReturnPageToSource