diff options
author | Sorin Vinturis <svinturis@cloudbasesolutions.com> | 2015-04-23 20:27:53 +0000 |
---|---|---|
committer | Gurucharan Shetty <gshetty@nicira.com> | 2015-04-23 14:49:33 -0700 |
commit | 3ed424e5e5d614e08a58ffe700bbe88ed0514a7b (patch) | |
tree | 6a064375ebbe3686970f6b77a77d2cf4a0fffea4 /datapath-windows/ovsext/Flow.c | |
parent | dd92c6165ddb53922562c43fdcc8845dc4bb435a (diff) | |
download | openvswitch-3ed424e5e5d614e08a58ffe700bbe88ed0514a7b.tar.gz |
datapath-windows: Removed gOvsCtrlLock global spinlock
There is no need to use gOvsCtrlLock spinlock to guard the switch
context, as there is now the switch context's reference count used
for this purpose.
Now the gOvsCtrlLock spinlock guards only one shared resource, the
OVS_OPEN_INSTANCE global instance array.
Signed-off-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/Flow.c')
-rw-r--r-- | datapath-windows/ovsext/Flow.c | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c index f25fe9a4f..6fa10a33f 100644 --- a/datapath-windows/ovsext/Flow.c +++ b/datapath-windows/ovsext/Flow.c @@ -31,7 +31,6 @@ #pragma warning( push ) #pragma warning( disable:4127 ) -extern PNDIS_SPIN_LOCK gOvsCtrlLock; extern POVS_SWITCH_CONTEXT gOvsSwitchContext; extern UINT64 ovsTimeIncrementPerTick; @@ -1995,25 +1994,23 @@ OvsDoDumpFlows(OvsFlowDumpInput *dumpInput, BOOLEAN findNextNonEmpty = FALSE; dpNo = dumpInput->dpNo; - NdisAcquireSpinLock(gOvsCtrlLock); if (gOvsSwitchContext->dpNo != dpNo) { status = STATUS_INVALID_PARAMETER; - goto unlock; + goto exit; } rowIndex = dumpInput->position[0]; if (rowIndex >= OVS_FLOW_TABLE_SIZE) { dumpOutput->n = 0; *replyLen = sizeof(*dumpOutput); - goto unlock; + goto exit; } columnIndex = dumpInput->position[1]; datapath = &gOvsSwitchContext->datapath; ASSERT(datapath); - ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); - OvsAcquireDatapathRead(datapath, &dpLockState, TRUE); + OvsAcquireDatapathRead(datapath, &dpLockState, FALSE); head = &datapath->flowTable[rowIndex]; node = head->Flink; @@ -2062,8 +2059,7 @@ OvsDoDumpFlows(OvsFlowDumpInput *dumpInput, dp_unlock: OvsReleaseDatapath(datapath, &dpLockState); -unlock: - NdisReleaseSpinLock(gOvsCtrlLock); +exit: return status; } @@ -2124,21 +2120,18 @@ OvsPutFlowIoctl(PVOID inputBuffer, } dpNo = put->dpNo; - NdisAcquireSpinLock(gOvsCtrlLock); if (gOvsSwitchContext->dpNo != dpNo) { status = STATUS_INVALID_PARAMETER; - goto unlock; + goto exit; } datapath = &gOvsSwitchContext->datapath; ASSERT(datapath); - ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); - OvsAcquireDatapathWrite(datapath, &dpLockState, TRUE); + OvsAcquireDatapathWrite(datapath, &dpLockState, FALSE); status = HandleFlowPut(put, datapath, stats); OvsReleaseDatapath(datapath, &dpLockState); -unlock: - NdisReleaseSpinLock(gOvsCtrlLock); +exit: return status; } @@ -2306,16 +2299,14 @@ OvsGetFlowIoctl(PVOID inputBuffer, } dpNo = getInput->dpNo; - NdisAcquireSpinLock(gOvsCtrlLock); if (gOvsSwitchContext->dpNo != dpNo) { status = STATUS_INVALID_PARAMETER; - goto unlock; + goto exit; } datapath = &gOvsSwitchContext->datapath; ASSERT(datapath); - ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); - OvsAcquireDatapathRead(datapath, &dpLockState, TRUE); + OvsAcquireDatapathRead(datapath, &dpLockState, FALSE); flow = OvsLookupFlow(datapath, &getInput->key, &hash, FALSE); if (!flow) { status = STATUS_INVALID_PARAMETER; @@ -2327,8 +2318,7 @@ OvsGetFlowIoctl(PVOID inputBuffer, dp_unlock: OvsReleaseDatapath(datapath, &dpLockState); -unlock: - NdisReleaseSpinLock(gOvsCtrlLock); +exit: return status; } @@ -2339,21 +2329,18 @@ OvsFlushFlowIoctl(UINT32 dpNo) OVS_DATAPATH *datapath = NULL; LOCK_STATE_EX dpLockState; - NdisAcquireSpinLock(gOvsCtrlLock); if (gOvsSwitchContext->dpNo != dpNo) { status = STATUS_INVALID_PARAMETER; - goto unlock; + goto exit; } datapath = &gOvsSwitchContext->datapath; ASSERT(datapath); - ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); - OvsAcquireDatapathWrite(datapath, &dpLockState, TRUE); + OvsAcquireDatapathWrite(datapath, &dpLockState, FALSE); DeleteAllFlows(datapath); OvsReleaseDatapath(datapath, &dpLockState); -unlock: - NdisReleaseSpinLock(gOvsCtrlLock); +exit: return status; } |