From ba7f9d9019b28ee3331893b1771aa239b0bed005 Mon Sep 17 00:00:00 2001 From: Sorin Vinturis Date: Thu, 26 Mar 2015 19:59:37 +0000 Subject: [PATCH] datapath-windows: Added specific pool tag for switch code All memory allocations within switch code have 'SSVO' pool tag. Signed-off-by: Sorin Vinturis Reported-by: Alin Gabriel Serdean Reported-at: https://github.com/openvswitch/ovs-issues/issues/56 Acked-by: Alin Gabriel Serdean Acked-by: Eitan Eliahu Signed-off-by: Ben Pfaff --- datapath-windows/ovsext/Switch.c | 53 ++++++++++++++++++-------------- datapath-windows/ovsext/Util.h | 1 + 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/datapath-windows/ovsext/Switch.c b/datapath-windows/ovsext/Switch.c index a228d8e3bf2..61a45318331 100644 --- a/datapath-windows/ovsext/Switch.c +++ b/datapath-windows/ovsext/Switch.c @@ -168,8 +168,8 @@ OvsCreateSwitch(NDIS_HANDLE ndisFilterHandle, OVS_LOG_TRACE("Enter: Create switch object"); - switchContext = - (POVS_SWITCH_CONTEXT) OvsAllocateMemory(sizeof(OVS_SWITCH_CONTEXT)); + switchContext = (POVS_SWITCH_CONTEXT) OvsAllocateMemoryWithTag( + sizeof(OVS_SWITCH_CONTEXT), OVS_SWITCH_POOL_TAG); if (switchContext == NULL) { status = NDIS_STATUS_RESOURCES; goto create_switch_done; @@ -187,7 +187,7 @@ OvsCreateSwitch(NDIS_HANDLE ndisFilterHandle, if (status != NDIS_STATUS_SUCCESS) { OVS_LOG_ERROR("OvsExtAttach: Extension is running in " "non-switch environment."); - OvsFreeMemory(switchContext); + OvsFreeMemoryWithTag(switchContext, OVS_SWITCH_POOL_TAG); goto create_switch_done; } @@ -198,14 +198,14 @@ OvsCreateSwitch(NDIS_HANDLE ndisFilterHandle, status = OvsInitSwitchContext(switchContext); if (status != NDIS_STATUS_SUCCESS) { - OvsFreeMemory(switchContext); + OvsFreeMemoryWithTag(switchContext, OVS_SWITCH_POOL_TAG); goto create_switch_done; } status = OvsTunnelFilterInitialize(gOvsExtDriverObject); if (status != NDIS_STATUS_SUCCESS) { OvsUninitSwitchContext(switchContext); - OvsFreeMemory(switchContext); + OvsFreeMemoryWithTag(switchContext, OVS_SWITCH_POOL_TAG); goto create_switch_done; } *switchContextOut = switchContext; @@ -264,7 +264,7 @@ OvsDeleteSwitch(POVS_SWITCH_CONTEXT switchContext) OvsTunnelFilterUninitialize(gOvsExtDriverObject); OvsClearAllSwitchVports(switchContext); OvsUninitSwitchContext(switchContext); - OvsFreeMemory(switchContext); + OvsFreeMemoryWithTag(switchContext, OVS_SWITCH_POOL_TAG); } OVS_LOG_TRACE("Exit: deleted switch %p dpNo: %d", switchContext, dpNo); } @@ -358,14 +358,14 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext) switchContext->dispatchLock = NdisAllocateRWLock(switchContext->NdisFilterHandle); - switchContext->portNoHashArray = (PLIST_ENTRY) - OvsAllocateMemory(sizeof(LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE); - switchContext->ovsPortNameHashArray = (PLIST_ENTRY) - 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); + switchContext->portNoHashArray = (PLIST_ENTRY)OvsAllocateMemoryWithTag( + sizeof(LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE, OVS_SWITCH_POOL_TAG); + switchContext->ovsPortNameHashArray = (PLIST_ENTRY)OvsAllocateMemoryWithTag( + sizeof(LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE, OVS_SWITCH_POOL_TAG); + switchContext->portIdHashArray= (PLIST_ENTRY)OvsAllocateMemoryWithTag( + sizeof(LIST_ENTRY) * OVS_MAX_VPORT_ARRAY_SIZE, OVS_SWITCH_POOL_TAG); + switchContext->pidHashArray = (PLIST_ENTRY)OvsAllocateMemoryWithTag( + sizeof(LIST_ENTRY) * OVS_MAX_PID_ARRAY_SIZE, OVS_SWITCH_POOL_TAG); status = OvsAllocateFlowTable(&switchContext->datapath, switchContext); if (status == NDIS_STATUS_SUCCESS) { @@ -381,17 +381,20 @@ OvsInitSwitchContext(POVS_SWITCH_CONTEXT switchContext) NdisFreeRWLock(switchContext->dispatchLock); } if (switchContext->portNoHashArray) { - OvsFreeMemory(switchContext->portNoHashArray); + OvsFreeMemoryWithTag(switchContext->portNoHashArray, + OVS_SWITCH_POOL_TAG); } if (switchContext->ovsPortNameHashArray) { - OvsFreeMemory(switchContext->ovsPortNameHashArray); + OvsFreeMemoryWithTag(switchContext->ovsPortNameHashArray, + OVS_SWITCH_POOL_TAG); } if (switchContext->portIdHashArray) { - OvsFreeMemory(switchContext->portIdHashArray); + OvsFreeMemoryWithTag(switchContext->portIdHashArray, + OVS_SWITCH_POOL_TAG); } - if (switchContext->pidHashArray) { - OvsFreeMemory(switchContext->pidHashArray); + OvsFreeMemoryWithTag(switchContext->pidHashArray, + OVS_SWITCH_POOL_TAG); } OvsDeleteFlowTable(&switchContext->datapath); @@ -437,13 +440,17 @@ OvsUninitSwitchContext(POVS_SWITCH_CONTEXT switchContext) NdisFreeRWLock(switchContext->dispatchLock); switchContext->dispatchLock = NULL; NdisFreeSpinLock(&(switchContext->pidHashLock)); - OvsFreeMemory(switchContext->ovsPortNameHashArray); + OvsFreeMemoryWithTag(switchContext->ovsPortNameHashArray, + OVS_SWITCH_POOL_TAG); switchContext->ovsPortNameHashArray = NULL; - OvsFreeMemory(switchContext->portIdHashArray); + OvsFreeMemoryWithTag(switchContext->portIdHashArray, + OVS_SWITCH_POOL_TAG); switchContext->portIdHashArray = NULL; - OvsFreeMemory(switchContext->portNoHashArray); + OvsFreeMemoryWithTag(switchContext->portNoHashArray, + OVS_SWITCH_POOL_TAG); switchContext->portNoHashArray = NULL; - OvsFreeMemory(switchContext->pidHashArray); + OvsFreeMemoryWithTag(switchContext->pidHashArray, + OVS_SWITCH_POOL_TAG); switchContext->pidHashArray = NULL; OvsDeleteFlowTable(&switchContext->datapath); OvsCleanupBufferPool(switchContext); diff --git a/datapath-windows/ovsext/Util.h b/datapath-windows/ovsext/Util.h index 115f334f005..2cebe6f19af 100644 --- a/datapath-windows/ovsext/Util.h +++ b/datapath-windows/ovsext/Util.h @@ -30,6 +30,7 @@ #define OVS_VXLAN_POOL_TAG 'XSVO' #define OVS_IPHELPER_POOL_TAG 'HSVO' #define OVS_OID_POOL_TAG 'ASVO' +#define OVS_SWITCH_POOL_TAG 'SSVO' VOID *OvsAllocateMemory(size_t size); VOID *OvsAllocateMemoryWithTag(size_t size, ULONG tag);