diff options
author | Sorin Vinturis <svinturis@cloudbasesolutions.com> | 2015-03-26 19:59:36 +0000 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2015-03-26 14:18:41 -0700 |
commit | 5bf619159c26044b5643a50ec83aaa7de5b52aef (patch) | |
tree | 6e9fd445fcc370db370a7276b129e2eaef6b374b /datapath-windows/ovsext/Datapath.c | |
parent | aa63bc9de230f688692831ee9719a0b9b5eddc6b (diff) | |
download | openvswitch-5bf619159c26044b5643a50ec83aaa7de5b52aef.tar.gz |
datapath-windows: Added specific pool tag for datapath code
All memory allocations within datapath code have 'DSVO' pool tag.
Signed-off-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Reported-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/56
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Eitan Eliahu <eliahue@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/Datapath.c')
-rw-r--r-- | datapath-windows/ovsext/Datapath.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index c6fe89eb7..888c6ef79 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 |