summaryrefslogtreecommitdiff
path: root/network/netadaptercx/netvadapterlibrary/code/memory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'network/netadaptercx/netvadapterlibrary/code/memory.cpp')
-rw-r--r--network/netadaptercx/netvadapterlibrary/code/memory.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/network/netadaptercx/netvadapterlibrary/code/memory.cpp b/network/netadaptercx/netvadapterlibrary/code/memory.cpp
index 0c010d59..b7536531 100644
--- a/network/netadaptercx/netvadapterlibrary/code/memory.cpp
+++ b/network/netadaptercx/netvadapterlibrary/code/memory.cpp
@@ -34,6 +34,13 @@ Memory::Initialize(
}
m_lastBufferToUse = PREALLOCATED_BUFFERS_COUNT;
+ // Create WDF spinlock for the queue, parent to the queue's WDF handle
+ {
+ WDF_OBJECT_ATTRIBUTES attributes;
+ WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
+ status = WdfSpinLockCreate(&attributes, &m_spinLock);
+ NT_ASSERT(NT_SUCCESS(status));
+ }
return STATUS_SUCCESS;
}
@@ -56,14 +63,17 @@ Memory::PopAvailableBuffer(
void
)
{
- KAcquireSpinLock lock{ m_spinLock };
+ WdfSpinLockAcquire(m_spinLock);
if (m_lastBufferToUse == 0)
{
+ WdfSpinLockRelease(m_spinLock);
return nullptr;
}
+ auto returnbuffer = m_buffersReadyToUse[--m_lastBufferToUse];
+ WdfSpinLockRelease(m_spinLock);
- return m_buffersReadyToUse[--m_lastBufferToUse];
+ return returnbuffer;
}
void
@@ -71,11 +81,12 @@ Memory::ReturnBuffer(
MemoryBuffer* Buffer
)
{
- KAcquireSpinLock lock{ m_spinLock };
+ WdfSpinLockAcquire(m_spinLock);
NT_FRE_ASSERT(m_lastBufferToUse < PREALLOCATED_BUFFERS_COUNT);
m_buffersReadyToUse[m_lastBufferToUse++] = Buffer;
+ WdfSpinLockRelease(m_spinLock);
}
#endif //NETCX 2.6 only