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