#include "precomp.h"
-#include "Datapath.h"
#include "Switch.h"
+#include "User.h"
+#include "Datapath.h"
#include "Vport.h"
#include "Event.h"
#include "Debug.h"
LIST_ENTRY ovsEventQueue;
+static NDIS_SPIN_LOCK eventQueueLock;
UINT32 ovsNumEventQueue;
UINT32 ovsNumPollAll;
-extern PNDIS_SPIN_LOCK gOvsCtrlLock;
-
NTSTATUS
OvsInitEventQueue()
{
InitializeListHead(&ovsEventQueue);
+ NdisAllocateSpinLock(&eventQueueLock);
return STATUS_SUCCESS;
}
{
ASSERT(IsListEmpty(&ovsEventQueue));
ASSERT(ovsNumEventQueue == 0);
+ NdisFreeSpinLock(&eventQueueLock);
}
static __inline VOID
OvsAcquireEventQueueLock()
{
- NdisAcquireSpinLock(gOvsCtrlLock);
+ NdisAcquireSpinLock(&eventQueueLock);
}
static __inline VOID
OvsReleaseEventQueueLock()
{
- NdisReleaseSpinLock(gOvsCtrlLock);
+ NdisReleaseSpinLock(&eventQueueLock);
}
/*
}
queue = (POVS_EVENT_QUEUE)instance->eventQueue;
+ if (queue == NULL) {
+ OvsReleaseEventQueueLock();
+ OVS_LOG_TRACE("Exit: Event queue does not exist");
+ return STATUS_INVALID_PARAMETER;
+ }
if (queue->pendingIrp) {
OvsReleaseEventQueueLock();
OVS_LOG_TRACE("Exit: Event queue already in pending state");