[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