LG
Is there any reason to initialize the pidLink in the Event queue? (We have a 
single Event queue per datapath, the Pid is mainly for packet miss queues)
Thanks,
Eitan

-----Original Message-----
From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Ankur Sharma
Sent: Monday, October 20, 2014 5:35 PM
To: dev@openvswitch.org
Subject: [ovs-dev] [PATCH v1 1/6] datapath-windows: pid-instance hash table 
data structure.

This patch introduces data structure for holding instances hashed by pid.

Signed-off-by: Ankur Sharma <ankursha...@vmware.com>
---
 datapath-windows/ovsext/Datapath.h |  2 ++
 datapath-windows/ovsext/Event.c    |  1 +
 datapath-windows/ovsext/Switch.c   | 15 ++++++++++++++-
 datapath-windows/ovsext/Switch.h   |  3 +++
 4 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/datapath-windows/ovsext/Datapath.h 
b/datapath-windows/ovsext/Datapath.h
index abbcc1a..221515d 100644
--- a/datapath-windows/ovsext/Datapath.h
+++ b/datapath-windows/ovsext/Datapath.h
@@ -87,6 +87,8 @@ typedef struct _OVS_OPEN_INSTANCE {
                                  * markers can store the row and the column
                                  * indices. */
     } dumpState;                /* data to support dump commands. */
+    LIST_ENTRY             pidLink; /* Links the instance to
+                                     * pidHashArray */
 } OVS_OPEN_INSTANCE, *POVS_OPEN_INSTANCE;
 
 NDIS_STATUS OvsCreateDeviceObject(NDIS_HANDLE ovsExtDriverHandle); diff --git 
a/datapath-windows/ovsext/Event.c b/datapath-windows/ovsext/Event.c index 
656f719..96f4e16 100644
--- a/datapath-windows/ovsext/Event.c
+++ b/datapath-windows/ovsext/Event.c
@@ -258,6 +258,7 @@ OvsSubscribeEventIoctl(PFILE_OBJECT fileObject,
         ovsNumEventQueue++;
         instance->eventQueue = queue;
         queue->instance = instance;
+        InitializeListHead(&(instance->pidLink));
     } else {
         queue = (POVS_EVENT_QUEUE)instance->eventQueue;
         RemoveEntryList(&queue->queueLink);
diff --git a/datapath-windows/ovsext/Switch.c b/datapath-windows/ovsext/Switch.c
index ac4a847..5593d43 100644
--- a/datapath-windows/ovsext/Switch.c
+++ b/datapath-windows/ovsext/Switch.c
@@ -360,6 +360,8 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext)
         OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
     switchContext->portIdHashArray= (PLIST_ENTRY)
         OvsAllocateMemory(sizeof (LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE);
+    switchContext->pidHashArray = (PLIST_ENTRY)
+        OvsAllocateMemory(sizeof(LIST_ENTRY) * OVS_MAX_PID_ARRAY_SIZE);
     status = OvsAllocateFlowTable(&switchContext->datapath, switchContext);
 
     if (status == NDIS_STATUS_SUCCESS) { @@ -369,7 +371,8 @@ 
OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext)
         switchContext->dispatchLock == NULL ||
         switchContext->portNoHashArray == NULL ||
         switchContext->ovsPortNameHashArray == NULL ||
-        switchContext->portIdHashArray== NULL) {
+        switchContext->portIdHashArray== NULL ||
+        switchContext->pidHashArray == NULL) {
         if (switchContext->dispatchLock) {
             NdisFreeRWLock(switchContext->dispatchLock);
         }
@@ -382,6 +385,11 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext)
         if (switchContext->portIdHashArray) {
             OvsFreeMemory(switchContext->portIdHashArray);
         }
+
+        if (switchContext->pidHashArray) {
+            OvsFreeMemory(switchContext->pidHashArray);
+        }
+
         OvsDeleteFlowTable(&switchContext->datapath);
         OvsCleanupBufferPool(switchContext);
 
@@ -399,6 +407,10 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext)
         InitializeListHead(&switchContext->portNoHashArray[i]);
     }
 
+    for (i = 0; i < OVS_MAX_PID_ARRAY_SIZE; i++) {
+        InitializeListHead(&switchContext->pidHashArray[i]);
+    }
+
     switchContext->isActivated = FALSE;
     switchContext->isActivateFailed = FALSE;
     switchContext->dpNo = OVS_DP_NUMBER; @@ -420,6 +432,7 @@ 
OvsCleanupSwitchContext(POVS_SWITCH_CONTEXT switchContext)
     OvsFreeMemory(switchContext->ovsPortNameHashArray);
     OvsFreeMemory(switchContext->portIdHashArray);
     OvsFreeMemory(switchContext->portNoHashArray);
+    OvsFreeMemory(switchContext->pidHashArray);
     OvsDeleteFlowTable(&switchContext->datapath);
     OvsCleanupBufferPool(switchContext);
     OVS_LOG_TRACE("Exit: Delete switchContext: %p", switchContext); diff --git 
a/datapath-windows/ovsext/Switch.h b/datapath-windows/ovsext/Switch.h
index ac708b7..7fdca5f 100644
--- a/datapath-windows/ovsext/Switch.h
+++ b/datapath-windows/ovsext/Switch.h
@@ -24,8 +24,10 @@
 #include "NetProto.h"
 #include "BufferMgmt.h"
 #define OVS_MAX_VPORT_ARRAY_SIZE 1024
+#define OVS_MAX_PID_ARRAY_SIZE   1024
 
 #define OVS_VPORT_MASK (OVS_MAX_VPORT_ARRAY_SIZE - 1)
+#define OVS_PID_MASK (OVS_MAX_PID_ARRAY_SIZE - 1)
 
 #define OVS_INTERNAL_VPORT_DEFAULT_INDEX 0
 
@@ -107,6 +109,7 @@ typedef struct _OVS_SWITCH_CONTEXT
     PLIST_ENTRY             ovsPortNameHashArray;   // based on ovsName
     PLIST_ENTRY             portIdHashArray;        // based on portId
     PLIST_ENTRY             portNoHashArray;        // based on ovs port number
+    PLIST_ENTRY             pidHashArray;           // based on packet pids
 
     UINT32                  numPhysicalNics;
     UINT32                  numVports;     // include validation port
--
1.9.1

_______________________________________________
dev mailing list
dev@openvswitch.org
https://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailman/listinfo/dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=yTvML8OxA42Jb6ViHe7fUXbvPVOYDPVq87w43doxtlY%3D%0A&m=Y4YB3DYy%2F8KXn7Ec0fR5y8Z%2Bnbvn%2BeqYFPYluIjMnZc%3D%0A&s=31b080e830da9efec231f173ebcb97d0c6a58c5847341037a1242fbdb2630a67
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to