Skip to content

Commit

Permalink
datapath-windows: Added specific pool tag for oid code
Browse files Browse the repository at this point in the history
All memory allocations within oid code have 'ASVO' pool tag.

Signed-off-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Reported-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Reported-at: openvswitch/ovs-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>
  • Loading branch information
svinturis authored and blp committed Mar 26, 2015
1 parent f68ddba commit 5b55d0a
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 12 deletions.
41 changes: 29 additions & 12 deletions datapath-windows/ovsext/Oid.c
Expand Up @@ -605,7 +605,7 @@ OvsIssueOidRequest(POVS_SWITCH_CONTEXT switchContext,
NDIS_STATUS status;
PNDIS_OID_REQUEST oidRequest;
POVS_OID_CONTEXT oidContext;
ULONG OvsExtOidRequestId = 'ISVO';
ULONG OvsExtOidRequestId = 'ISVO';

DBG_UNREFERENCED_PARAMETER(inputSize);
DBG_UNREFERENCED_PARAMETER(oidInputBuffer);
Expand All @@ -617,15 +617,17 @@ OvsIssueOidRequest(POVS_SWITCH_CONTEXT switchContext,
ASSERT(oidOutputBuffer == NULL || outputSize != 0);
ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);

oidRequest = OvsAllocateMemory(sizeof *oidRequest);
oidRequest = OvsAllocateMemoryWithTag(sizeof *oidRequest,
OVS_OID_POOL_TAG);
if (!oidRequest) {
status = NDIS_STATUS_RESOURCES;
goto done;
}

oidContext = OvsAllocateMemory(sizeof *oidContext);
oidContext = OvsAllocateMemoryWithTag(sizeof *oidContext,
OVS_OID_POOL_TAG);
if (!oidContext) {
OvsFreeMemory(oidRequest);
OvsFreeMemoryWithTag(oidRequest, OVS_OID_POOL_TAG);
status = NDIS_STATUS_RESOURCES;
goto done;
}
Expand Down Expand Up @@ -684,8 +686,8 @@ OvsIssueOidRequest(POVS_SWITCH_CONTEXT switchContext,
status = oidContext->status;
ASSERT(status != NDIS_STATUS_PENDING);

OvsFreeMemory(oidRequest);
OvsFreeMemory(oidContext);
OvsFreeMemoryWithTag(oidRequest, OVS_OID_POOL_TAG);
OvsFreeMemoryWithTag(oidContext, OVS_OID_POOL_TAG);

done:
OVS_LOG_TRACE("Exit: status %8x.", status);
Expand All @@ -710,7 +712,8 @@ OvsQuerySwitchActivationComplete(POVS_SWITCH_CONTEXT switchContext,
OVS_LOG_TRACE("Enter: switchContext: %p, switchActive: %p",
switchContext, switchActive);

switchParams = OvsAllocateMemory(sizeof *switchParams);
switchParams = OvsAllocateMemoryWithTag(sizeof *switchParams,
OVS_OID_POOL_TAG);
if (!switchParams) {
status = NDIS_STATUS_RESOURCES;
goto done;
Expand Down Expand Up @@ -741,7 +744,7 @@ OvsQuerySwitchActivationComplete(POVS_SWITCH_CONTEXT switchContext,
*switchActive = switchParams->IsActive;
}

OvsFreeMemory(switchParams);
OvsFreeMemoryWithTag(switchParams, OVS_OID_POOL_TAG);

done:
OVS_LOG_TRACE("Exit: status %8x, switchActive: %d.",
Expand Down Expand Up @@ -769,7 +772,7 @@ OvsGetPortsOnSwitch(POVS_SWITCH_CONTEXT switchContext,
do {
UINT32 reqdArraySize;

portArray = OvsAllocateMemory(arraySize);
portArray = OvsAllocateMemoryWithTag(arraySize, OVS_OID_POOL_TAG);
if (!portArray) {
status = NDIS_STATUS_RESOURCES;
goto done;
Expand All @@ -794,7 +797,7 @@ OvsGetPortsOnSwitch(POVS_SWITCH_CONTEXT switchContext,
break;
}

OvsFreeMemory(portArray);
OvsFreeMemoryWithTag(portArray, OVS_OID_POOL_TAG);
arraySize = reqdArraySize;
if (status != NDIS_STATUS_INVALID_LENGTH) {
break;
Expand Down Expand Up @@ -827,7 +830,7 @@ OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext,
do {
UINT32 reqdArraySize;

nicArray = OvsAllocateMemory(arraySize);
nicArray = OvsAllocateMemoryWithTag(arraySize, OVS_OID_POOL_TAG);
if (!nicArray) {
status = NDIS_STATUS_RESOURCES;
goto done;
Expand All @@ -852,7 +855,7 @@ OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext,
break;
}

OvsFreeMemory(nicArray);
OvsFreeMemoryWithTag(nicArray, OVS_OID_POOL_TAG);
arraySize = reqdArraySize;
if (status != NDIS_STATUS_INVALID_LENGTH) {
break;
Expand All @@ -863,3 +866,17 @@ OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext,
OVS_LOG_TRACE("Exit: status %8x.", status);
return status;
}

VOID OvsFreeSwitchPortsArray(PNDIS_SWITCH_PORT_ARRAY portsArray)
{
if (portsArray) {
OvsFreeMemoryWithTag(portsArray, OVS_OID_POOL_TAG);
}
}

VOID OvsFreeSwitchNicsArray(PNDIS_SWITCH_NIC_ARRAY nicsArray)
{
if (nicsArray) {
OvsFreeMemoryWithTag(nicsArray, OVS_OID_POOL_TAG);
}
}
3 changes: 3 additions & 0 deletions datapath-windows/ovsext/Oid.h
Expand Up @@ -23,4 +23,7 @@ NDIS_STATUS OvsGetPortsOnSwitch(POVS_SWITCH_CONTEXT switchContext,
PNDIS_SWITCH_PORT_ARRAY *portArrayOut);
NDIS_STATUS OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext,
PNDIS_SWITCH_NIC_ARRAY *nicArrayOut);
VOID OvsFreeSwitchPortsArray(PNDIS_SWITCH_PORT_ARRAY portsArray);
VOID OvsFreeSwitchNicsArray(PNDIS_SWITCH_NIC_ARRAY nicsArray);

#endif /* __OID_H_ */
1 change: 1 addition & 0 deletions datapath-windows/ovsext/Util.h
Expand Up @@ -29,6 +29,7 @@
#define OVS_FLOW_POOL_TAG 'LSVO'
#define OVS_VXLAN_POOL_TAG 'XSVO'
#define OVS_IPHELPER_POOL_TAG 'HSVO'
#define OVS_OID_POOL_TAG 'ASVO'

VOID *OvsAllocateMemory(size_t size);
VOID *OvsAllocateMemoryWithTag(size_t size, ULONG tag);
Expand Down

0 comments on commit 5b55d0a

Please sign in to comment.