[ovs-dev] [PATCH v2 02/11] datapath-windows: Added specific pool tag for datapath code

Sorin Vinturis svinturis at cloudbasesolutions.com
Thu Mar 26 19:59:36 UTC 2015


All memory allocations within datapath code have 'DSVO' pool tag.

Signed-off-by: Sorin Vinturis <svinturis at cloudbasesolutions.com>
Reported-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/56
Acked-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
Acked-by: Eitan Eliahu <eliahue at vmware.com>
---
 datapath-windows/ovsext/Datapath.c | 38 +++++++++++++++++++++++++++++++++++---
 datapath-windows/ovsext/Datapath.h | 31 +++----------------------------
 datapath-windows/ovsext/Util.h     |  1 +
 3 files changed, 39 insertions(+), 31 deletions(-)

diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c
index c6fe89e..888c6ef 100644
--- a/datapath-windows/ovsext/Datapath.c
+++ b/datapath-windows/ovsext/Datapath.c
@@ -349,6 +349,37 @@ extern POVS_SWITCH_CONTEXT gOvsSwitchContext;
 NDIS_SPIN_LOCK ovsCtrlLockObj;
 PNDIS_SPIN_LOCK gOvsCtrlLock;
 
+NTSTATUS
+InitUserDumpState(POVS_OPEN_INSTANCE instance,
+                  POVS_MESSAGE ovsMsg)
+{
+    /* Clear the dumpState from a previous dump sequence. */
+    ASSERT(instance->dumpState.ovsMsg == NULL);
+    ASSERT(ovsMsg);
+
+    instance->dumpState.ovsMsg =
+        (POVS_MESSAGE)OvsAllocateMemoryWithTag(sizeof(OVS_MESSAGE),
+                                               OVS_DATAPATH_POOL_TAG);
+    if (instance->dumpState.ovsMsg == NULL) {
+        return STATUS_NO_MEMORY;
+    }
+    RtlCopyMemory(instance->dumpState.ovsMsg, ovsMsg,
+                  sizeof *instance->dumpState.ovsMsg);
+    RtlZeroMemory(instance->dumpState.index,
+                  sizeof instance->dumpState.index);
+
+    return STATUS_SUCCESS;
+}
+
+VOID
+FreeUserDumpState(POVS_OPEN_INSTANCE instance)
+{
+    if (instance->dumpState.ovsMsg != NULL) {
+        OvsFreeMemoryWithTag(instance->dumpState.ovsMsg,
+                             OVS_DATAPATH_POOL_TAG);
+        RtlZeroMemory(&instance->dumpState, sizeof instance->dumpState);
+    }
+}
 
 VOID
 OvsInit()
@@ -497,7 +528,8 @@ OvsAddOpenInstance(POVS_DEVICE_EXTENSION ovsExt,
                    PFILE_OBJECT fileObject)
 {
     POVS_OPEN_INSTANCE instance =
-        (POVS_OPEN_INSTANCE) OvsAllocateMemory(sizeof (OVS_OPEN_INSTANCE));
+        (POVS_OPEN_INSTANCE)OvsAllocateMemoryWithTag(sizeof(OVS_OPEN_INSTANCE),
+                                                     OVS_DATAPATH_POOL_TAG);
     UINT32 i;
 
     if (instance == NULL) {
@@ -508,7 +540,7 @@ OvsAddOpenInstance(POVS_DEVICE_EXTENSION ovsExt,
 
     if (ovsNumberOfOpenInstances >= OVS_MAX_OPEN_INSTANCES) {
         OvsReleaseCtrlLock();
-        OvsFreeMemory(instance);
+        OvsFreeMemoryWithTag(instance, OVS_DATAPATH_POOL_TAG);
         return STATUS_INSUFFICIENT_RESOURCES;
     }
     RtlZeroMemory(instance, sizeof (OVS_OPEN_INSTANCE));
@@ -559,7 +591,7 @@ OvsRemoveOpenInstance(PFILE_OBJECT fileObject)
     OvsReleaseCtrlLock();
     ASSERT(instance->eventQueue == NULL);
     ASSERT (instance->packetQueue == NULL);
-    OvsFreeMemory(instance);
+    OvsFreeMemoryWithTag(instance, OVS_DATAPATH_POOL_TAG);
 }
 
 NTSTATUS
diff --git a/datapath-windows/ovsext/Datapath.h b/datapath-windows/ovsext/Datapath.h
index ba31ece..863afc4 100644
--- a/datapath-windows/ovsext/Datapath.h
+++ b/datapath-windows/ovsext/Datapath.h
@@ -129,35 +129,10 @@ InitUserParamsCtx(PIRP irp,
     usrParamsCtx->outputLength = outputLength;
 }
 
-static __inline NTSTATUS
-InitUserDumpState(POVS_OPEN_INSTANCE instance,
-                  POVS_MESSAGE ovsMsg)
-{
-    /* Clear the dumpState from a previous dump sequence. */
-    ASSERT(instance->dumpState.ovsMsg == NULL);
-    ASSERT(ovsMsg);
-
-    instance->dumpState.ovsMsg =
-        (POVS_MESSAGE) OvsAllocateMemory(sizeof (OVS_MESSAGE));
-    if (instance->dumpState.ovsMsg == NULL) {
-        return STATUS_NO_MEMORY;
-    }
-    RtlCopyMemory(instance->dumpState.ovsMsg, ovsMsg,
-                  sizeof *instance->dumpState.ovsMsg);
-    RtlZeroMemory(instance->dumpState.index,
-                  sizeof instance->dumpState.index);
-
-    return STATUS_SUCCESS;
-}
+NTSTATUS InitUserDumpState(POVS_OPEN_INSTANCE instance,
+                           POVS_MESSAGE ovsMsg);
 
-static __inline VOID
-FreeUserDumpState(POVS_OPEN_INSTANCE instance)
-{
-    if (instance->dumpState.ovsMsg != NULL) {
-        OvsFreeMemory(instance->dumpState.ovsMsg);
-        RtlZeroMemory(&instance->dumpState, sizeof instance->dumpState);
-    }
-}
+VOID FreeUserDumpState(POVS_OPEN_INSTANCE instance);
 
 NTSTATUS OvsSetupDumpStart(POVS_USER_PARAMS_CONTEXT usrParamsCtx);
 
diff --git a/datapath-windows/ovsext/Util.h b/datapath-windows/ovsext/Util.h
index 0303f46..0f32654 100644
--- a/datapath-windows/ovsext/Util.h
+++ b/datapath-windows/ovsext/Util.h
@@ -23,6 +23,7 @@
 #define OVS_NBL_ONLY_POOL_TAG           'OSVO'
 #define OVS_NET_BUFFER_POOL_TAG         'NSVO'
 #define OVS_OTHER_POOL_TAG              'MSVO'
+#define OVS_DATAPATH_POOL_TAG           'DSVO'
 
 VOID *OvsAllocateMemory(size_t size);
 VOID *OvsAllocateMemoryWithTag(size_t size, ULONG tag);
-- 
1.9.0.msysgit.0



More information about the dev mailing list