Acked-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com>

-----Mesaj original-----
De la: dev [mailto:dev-boun...@openvswitch.org] În numele Sorin Vinturis
Trimis: Wednesday, March 25, 2015 10:14 PM
Către: dev@openvswitch.org
Subiect: [ovs-dev] [PATCH 07/11] datapath-windows: Added specific pool tag for 
iphelper code

All memory allocations within iphelper code have 'HSVO' pool tag.

Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com>
Reported-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/56
---
 datapath-windows/ovsext/IpHelper.c | 75 +++++++++++++++++++++-----------------
 datapath-windows/ovsext/Util.h     |  1 +
 2 files changed, 42 insertions(+), 34 deletions(-)

diff --git a/datapath-windows/ovsext/IpHelper.c 
b/datapath-windows/ovsext/IpHelper.c
index 0c64be4..f3e9658 100644
--- a/datapath-windows/ovsext/IpHelper.c
+++ b/datapath-windows/ovsext/IpHelper.c
@@ -14,6 +14,11 @@
  * limitations under the License.
  */
 
+#ifdef OVS_MEMORY_TAG
+#undef OVS_MEMORY_TAG
+#endif
+#define OVS_IPHELPER_POOL_TAG              'HSVO'
+
 #include "precomp.h"
 #include "IpHelper.h"
 #include "Switch.h"
@@ -777,7 +782,8 @@ OvsCreateIPNeighEntry(PMIB_IPNET_ROW2 ipNeigh)
     UINT64 timeVal;
 
     ASSERT(ipNeigh != NULL);
-    entry = (POVS_IPNEIGH_ENTRY)OvsAllocateMemory(sizeof (OVS_IPNEIGH_ENTRY));
+    entry = (POVS_IPNEIGH_ENTRY)OvsAllocateMemoryWithTag(
+        sizeof(OVS_IPNEIGH_ENTRY), OVS_IPHELPER_POOL_TAG);
     if (entry == NULL) {
         return NULL;
     }
@@ -802,8 +808,8 @@ OvsCreateIPForwardEntry(PMIB_IPFORWARD_ROW2 ipRoute)
 
     ASSERT(ipRoute);
 
-    entry =
-       (POVS_IPFORWARD_ENTRY)OvsAllocateMemory(sizeof (OVS_IPFORWARD_ENTRY));
+    entry = (POVS_IPFORWARD_ENTRY)OvsAllocateMemoryWithTag(
+        sizeof(OVS_IPFORWARD_ENTRY), OVS_IPHELPER_POOL_TAG);
     if (entry == NULL) {
         return NULL;
     }
@@ -823,7 +829,8 @@ OvsCreateFwdEntry(POVS_FWD_INFO fwdInfo)  {
     POVS_FWD_ENTRY entry;
 
-    entry = (POVS_FWD_ENTRY)OvsAllocateMemory(sizeof (OVS_FWD_ENTRY));
+    entry = (POVS_FWD_ENTRY)OvsAllocateMemoryWithTag(
+        sizeof(OVS_FWD_ENTRY), OVS_IPHELPER_POOL_TAG);
     if (entry == NULL) {
         return NULL;
     }
@@ -855,7 +862,7 @@ OvsRemoveFwdEntry(POVS_FWD_ENTRY fwdEntry)
     if (ipf->refCount == 0) {
         ASSERT(IsListEmpty(&ipf->fwdList));
         RemoveEntryList(&ipf->link);
-        OvsFreeMemory(ipf);
+        OvsFreeMemoryWithTag(ipf, OVS_IPHELPER_POOL_TAG);
     }
 
     if (ipn->refCount == 0) {
@@ -864,10 +871,10 @@ OvsRemoveFwdEntry(POVS_FWD_ENTRY fwdEntry)
         NdisAcquireSpinLock(&ovsIpHelperLock);
         RemoveEntryList(&ipn->slink);
         NdisReleaseSpinLock(&ovsIpHelperLock);
-        OvsFreeMemory(ipn);
+        OvsFreeMemoryWithTag(ipn, OVS_IPHELPER_POOL_TAG);
     }
 
-    OvsFreeMemory(fwdEntry);
+    OvsFreeMemoryWithTag(fwdEntry, OVS_IPHELPER_POOL_TAG);
 }
 
 
@@ -886,7 +893,7 @@ OvsRemoveIPForwardEntry(POVS_IPFORWARD_ENTRY ipf)
     ASSERT(ipf->refCount == 1);
 
     RemoveEntryList(&ipf->link);
-    OvsFreeMemory(ipf);
+    OvsFreeMemoryWithTag(ipf, OVS_IPHELPER_POOL_TAG);
 }
 
 
@@ -908,7 +915,7 @@ OvsRemoveIPNeighEntry(POVS_IPNEIGH_ENTRY ipn)
         NdisAcquireSpinLock(&ovsIpHelperLock);
         RemoveEntryList(&ipn->slink);
         NdisReleaseSpinLock(&ovsIpHelperLock);
-        OvsFreeMemory(ipn);
+        OvsFreeMemoryWithTag(ipn, OVS_IPHELPER_POOL_TAG);
     }
 }
 
@@ -1041,7 +1048,7 @@ OvsCleanupIpHelperRequestList(VOID)
                                STATUS_DEVICE_NOT_READY,
                                NULL);
         }
-        OvsFreeMemory(request);
+        OvsFreeMemoryWithTag(request, OVS_IPHELPER_POOL_TAG);
     }
 }
 
@@ -1076,8 +1083,8 @@ OvsInternalAdapterUp(UINT32 portNo,
     RtlCopyMemory(&ovsInternalNetCfgId, netCfgInstanceId, sizeof (GUID));
     RtlZeroMemory(&ovsInternalRow, sizeof (MIB_IF_ROW2));
 
-    request =
-      (POVS_IP_HELPER_REQUEST)OvsAllocateMemory(sizeof 
(OVS_IP_HELPER_REQUEST));
+    request = (POVS_IP_HELPER_REQUEST)OvsAllocateMemoryWithTag(
+        sizeof(OVS_IP_HELPER_REQUEST), OVS_IPHELPER_POOL_TAG);
     if (request == NULL) {
         OVS_LOG_ERROR("Fail to initialize Internal Adapter");
         return;
@@ -1103,7 +1110,7 @@ OvsHandleInternalAdapterUp(POVS_IP_HELPER_REQUEST request)
     MIB_UNICASTIPADDRESS_ROW ipEntry;
     GUID *netCfgInstanceId = &ovsInternalNetCfgId;
 
-    OvsFreeMemory(request);
+    OvsFreeMemoryWithTag(request, OVS_IPHELPER_POOL_TAG);
 
     status = OvsGetIfEntry(&ovsInternalNetCfgId, &ovsInternalRow);
 
@@ -1161,7 +1168,7 @@ OvsEnqueueIpHelperRequest(POVS_IP_HELPER_REQUEST request)
     if (ovsInternalPortNo == OVS_DEFAULT_PORT_NO ||
         ovsInternalIPConfigured == FALSE) {
         NdisReleaseSpinLock(&ovsIpHelperLock);
-        OvsFreeMemory(request);
+        OvsFreeMemoryWithTag(request, OVS_IPHELPER_POOL_TAG);
         return STATUS_NDIS_ADAPTER_NOT_READY;
     } else {
         InsertHeadList(&ovsIpHelperRequestList, &request->link); @@ -1185,8 
+1192,8 @@ OvsFwdIPHelperRequest(PNET_BUFFER_LIST nbl,  {
     POVS_IP_HELPER_REQUEST request;
 
-    request =
-      (POVS_IP_HELPER_REQUEST)OvsAllocateMemory(sizeof 
(OVS_IP_HELPER_REQUEST));
+    request = (POVS_IP_HELPER_REQUEST)OvsAllocateMemoryWithTag(
+        sizeof(OVS_IP_HELPER_REQUEST), OVS_IPHELPER_POOL_TAG);
 
     if (request == NULL) {
         return STATUS_INSUFFICIENT_RESOURCES; @@ -1328,15 +1335,15 @@ 
fwd_handle_nbl:
     if (status != STATUS_SUCCESS) {
         if (newFWD) {
             ASSERT(fwdEntry != NULL);
-            OvsFreeMemory(fwdEntry);
+            OvsFreeMemoryWithTag(fwdEntry, OVS_IPHELPER_POOL_TAG);
         }
         if (newIPF) {
             ASSERT(ipf && ipf->refCount == 0);
-            OvsFreeMemory(ipf);
+            OvsFreeMemoryWithTag(ipf, OVS_IPHELPER_POOL_TAG);
         }
         if (newIPN) {
             ASSERT(ipn && ipn->refCount == 0);
-            OvsFreeMemory(ipn);
+            OvsFreeMemoryWithTag(ipn, OVS_IPHELPER_POOL_TAG);
         }
         ipAddr = request->fwdReq.tunnelKey.dst;
         OVS_LOG_INFO("Fail to handle IP helper request for dst: %d.%d.%d.%d", 
@@ -1352,7 +1359,7 @@ fwd_handle_nbl:
                            status,
                            status == STATUS_SUCCESS ? &fwdInfo : NULL);
     }
-    OvsFreeMemory(request);
+    OvsFreeMemoryWithTag(request, OVS_IPHELPER_POOL_TAG);
 }
 
 
@@ -1477,7 +1484,7 @@ OvsStartIpHelper(PVOID data)
                 OvsHandleFwdRequest(req);
                 break;
             default:
-                OvsFreeMemory(req);
+                OvsFreeMemoryWithTag(req, OVS_IPHELPER_POOL_TAG);
             }
             NdisAcquireSpinLock(&ovsIpHelperLock);
         }
@@ -1539,14 +1546,14 @@ OvsInitIpHelper(NDIS_HANDLE ndisFilterHandle)
     HANDLE threadHandle;
     UINT32 i;
 
-    ovsFwdHashTable = (PLIST_ENTRY)OvsAllocateMemory(sizeof(LIST_ENTRY) *
-                                                     OVS_FWD_HASH_TABLE_SIZE);
+    ovsFwdHashTable = (PLIST_ENTRY)OvsAllocateMemoryWithTag(
+        sizeof(LIST_ENTRY) * OVS_FWD_HASH_TABLE_SIZE, 
+ OVS_IPHELPER_POOL_TAG);
 
-    ovsRouteHashTable = (PLIST_ENTRY)OvsAllocateMemory(sizeof(LIST_ENTRY) *
-                                                       
OVS_ROUTE_HASH_TABLE_SIZE);
+    ovsRouteHashTable = (PLIST_ENTRY)OvsAllocateMemoryWithTag(
+        sizeof(LIST_ENTRY) * OVS_ROUTE_HASH_TABLE_SIZE, 
+ OVS_IPHELPER_POOL_TAG);
 
-    ovsNeighHashTable = (PLIST_ENTRY)OvsAllocateMemory(sizeof(LIST_ENTRY) *
-                                                       
OVS_NEIGH_HASH_TABLE_SIZE);
+    ovsNeighHashTable = (PLIST_ENTRY)OvsAllocateMemoryWithTag(
+        sizeof(LIST_ENTRY) * OVS_NEIGH_HASH_TABLE_SIZE, 
+ OVS_IPHELPER_POOL_TAG);
 
     RtlZeroMemory(&ovsInternalRow, sizeof(MIB_IF_ROW2));
     RtlZeroMemory(&ovsInternalIPRow, sizeof (MIB_IPINTERFACE_ROW)); @@ 
-1609,15 +1616,15 @@ init_cleanup:
     if (status != STATUS_SUCCESS) {
         OvsCancelChangeNotification();
         if (ovsFwdHashTable) {
-            OvsFreeMemory(ovsFwdHashTable);
+            OvsFreeMemoryWithTag(ovsFwdHashTable, 
+ OVS_IPHELPER_POOL_TAG);
             ovsFwdHashTable = NULL;
         }
         if (ovsRouteHashTable) {
-            OvsFreeMemory(ovsRouteHashTable);
+            OvsFreeMemoryWithTag(ovsRouteHashTable, 
+ OVS_IPHELPER_POOL_TAG);
             ovsRouteHashTable = NULL;
         }
         if (ovsNeighHashTable) {
-            OvsFreeMemory(ovsNeighHashTable);
+            OvsFreeMemoryWithTag(ovsNeighHashTable, 
+ OVS_IPHELPER_POOL_TAG);
             ovsNeighHashTable = NULL;
         }
         if (ovsTableLock) {
@@ -1644,9 +1651,9 @@ OvsCleanupIpHelper(VOID)
                           KernelMode, FALSE, NULL);
     ObDereferenceObject(ovsIpHelperThreadContext.threadObject);
 
-    OvsFreeMemory(ovsFwdHashTable);
-    OvsFreeMemory(ovsRouteHashTable);
-    OvsFreeMemory(ovsNeighHashTable);
+    OvsFreeMemoryWithTag(ovsFwdHashTable, OVS_IPHELPER_POOL_TAG);
+    OvsFreeMemoryWithTag(ovsRouteHashTable, OVS_IPHELPER_POOL_TAG);
+    OvsFreeMemoryWithTag(ovsNeighHashTable, OVS_IPHELPER_POOL_TAG);
 
     NdisFreeRWLock(ovsTableLock);
     NdisFreeSpinLock(&ovsIpHelperLock);
@@ -1684,6 +1691,6 @@ OvsCancelFwdIpHelperRequest(PNET_BUFFER_LIST nbl)
                            STATUS_DEVICE_NOT_READY,
                            NULL);
         }
-        OvsFreeMemory(req);
+        OvsFreeMemoryWithTag(req, OVS_IPHELPER_POOL_TAG);
     }
 }
diff --git a/datapath-windows/ovsext/Util.h b/datapath-windows/ovsext/Util.h 
index c153acf..c410729 100644
--- a/datapath-windows/ovsext/Util.h
+++ b/datapath-windows/ovsext/Util.h
@@ -28,6 +28,7 @@
 #define OVS_EVENT_POOL_TAG              'ESVO'
 #define OVS_FLOW_POOL_TAG               'LSVO'
 #define OVS_VXLAN_POOL_TAG              'XSVO'
+#define OVS_IPHELPER_POOL_TAG           'HSVO'
 
 VOID *OvsAllocateMemory(size_t size);
 VOID *OvsAllocateMemoryWithTag(size_t size, ULONG tag);
--
1.9.0.msysgit.0
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to