summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--datapath-windows/ovsext/Datapath.c5
-rw-r--r--datapath-windows/ovsext/Flow.c12
-rw-r--r--datapath-windows/ovsext/PacketIO.c2
3 files changed, 12 insertions, 7 deletions
diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c
index e2d89a647..6e7a298c9 100644
--- a/datapath-windows/ovsext/Datapath.c
+++ b/datapath-windows/ovsext/Datapath.c
@@ -1389,8 +1389,9 @@ OvsGetVportDumpNext(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
* it means we have an array of pids, instead of a single pid.
* ATM we assume we have one pid only.
*/
-
- NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState, 0);
+ ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+ NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState,
+ NDIS_RWL_AT_DISPATCH_LEVEL);
if (gOvsSwitchContext->numVports > 0) {
/* inBucket: the bucket, used for lookup */
diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c
index ebcf005d6..50fa954c1 100644
--- a/datapath-windows/ovsext/Flow.c
+++ b/datapath-windows/ovsext/Flow.c
@@ -1935,7 +1935,8 @@ OvsDoDumpFlows(OvsFlowDumpInput *dumpInput,
datapath = &gOvsSwitchContext->datapath;
ASSERT(datapath);
- OvsAcquireDatapathRead(datapath, &dpLockState, FALSE);
+ ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+ OvsAcquireDatapathRead(datapath, &dpLockState, TRUE);
head = &datapath->flowTable[rowIndex];
node = head->Flink;
@@ -2077,7 +2078,8 @@ OvsPutFlowIoctl(PVOID inputBuffer,
datapath = &gOvsSwitchContext->datapath;
ASSERT(datapath);
- OvsAcquireDatapathWrite(datapath, &dpLockState, FALSE);
+ ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+ OvsAcquireDatapathWrite(datapath, &dpLockState, TRUE);
status = HandleFlowPut(put, datapath, stats);
OvsReleaseDatapath(datapath, &dpLockState);
@@ -2256,7 +2258,8 @@ OvsGetFlowIoctl(PVOID inputBuffer,
datapath = &gOvsSwitchContext->datapath;
ASSERT(datapath);
- OvsAcquireDatapathRead(datapath, &dpLockState, FALSE);
+ ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+ OvsAcquireDatapathRead(datapath, &dpLockState, TRUE);
flow = OvsLookupFlow(datapath, &getInput->key, &hash, FALSE);
if (!flow) {
status = STATUS_INVALID_PARAMETER;
@@ -2289,7 +2292,8 @@ OvsFlushFlowIoctl(UINT32 dpNo)
datapath = &gOvsSwitchContext->datapath;
ASSERT(datapath);
- OvsAcquireDatapathWrite(datapath, &dpLockState, FALSE);
+ ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+ OvsAcquireDatapathWrite(datapath, &dpLockState, TRUE);
DeleteAllFlows(datapath);
OvsReleaseDatapath(datapath, &dpLockState);
diff --git a/datapath-windows/ovsext/PacketIO.c b/datapath-windows/ovsext/PacketIO.c
index ac7862d85..87d703786 100644
--- a/datapath-windows/ovsext/PacketIO.c
+++ b/datapath-windows/ovsext/PacketIO.c
@@ -268,7 +268,7 @@ OvsStartNBLIngress(POVS_SWITCH_CONTEXT switchContext,
}
ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
- OvsAcquireDatapathRead(datapath, &dpLockState, dispatch);
+ OvsAcquireDatapathRead(datapath, &dpLockState, TRUE);
flow = OvsLookupFlow(datapath, &key, &hash, FALSE);
if (flow) {