[ovs-dev] [PATCH] OVN: convert buffered_mac_bindings to ovs_list

Lorenzo Bianconi lorenzo.bianconi at redhat.com
Wed May 8 13:41:48 UTC 2019


Convert buffered_mac_bindings from hashmap to a linked list since it is
used just for iteration (no lookups are performed on it)

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
---
 ovn/controller/pinctrl.c | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/ovn/controller/pinctrl.c b/ovn/controller/pinctrl.c
index 4f1991d29..8ae1f9bd6 100644
--- a/ovn/controller/pinctrl.c
+++ b/ovn/controller/pinctrl.c
@@ -321,6 +321,7 @@ struct buffer_info {
 #define BUFFER_QUEUE_DEPTH     4
 struct buffered_packets {
     struct hmap_node hmap_node;
+    struct ovs_list list;
 
     /* key */
     struct in6_addr ip;
@@ -333,17 +334,17 @@ struct buffered_packets {
 };
 
 static struct hmap buffered_packets_map;
-static struct hmap buffered_mac_bindings;
+static struct ovs_list buffered_mac_bindings;
 
 static void
 init_buffered_packets_map(void)
 {
     hmap_init(&buffered_packets_map);
-    hmap_init(&buffered_mac_bindings);
+    ovs_list_init(&buffered_mac_bindings);
 }
 
 static void
-destroy_buffered_packets(struct buffered_packets *bp, struct hmap *map)
+destroy_buffered_packets(struct buffered_packets *bp)
 {
     struct buffer_info *bi;
 
@@ -354,8 +355,6 @@ destroy_buffered_packets(struct buffered_packets *bp, struct hmap *map)
 
         bp->head = (bp->head + 1) % BUFFER_QUEUE_DEPTH;
     }
-    hmap_remove(map, &bp->hmap_node);
-    free(bp);
 }
 
 static void
@@ -363,14 +362,16 @@ destroy_buffered_packets_map(void)
 {
     struct buffered_packets *bp, *next;
     HMAP_FOR_EACH_SAFE (bp, next, hmap_node, &buffered_packets_map) {
-        destroy_buffered_packets(bp, &buffered_packets_map);
+        destroy_buffered_packets(bp);
+        hmap_remove(&buffered_packets_map, &bp->hmap_node);
+        free(bp);
     }
     hmap_destroy(&buffered_packets_map);
 
-    HMAP_FOR_EACH_SAFE (bp, next, hmap_node, &buffered_mac_bindings) {
-        destroy_buffered_packets(bp, &buffered_mac_bindings);
+    LIST_FOR_EACH_POP (bp, list, &buffered_mac_bindings) {
+        destroy_buffered_packets(bp);
+        free(bp);
     }
-    hmap_destroy(&buffered_mac_bindings);
 }
 
 static void
@@ -437,7 +438,9 @@ buffered_packets_map_gc(void)
 
     HMAP_FOR_EACH_SAFE (cur_qp, next_qp, hmap_node, &buffered_packets_map) {
         if (now > cur_qp->timestamp + BUFFER_MAP_TIMEOUT) {
-            destroy_buffered_packets(cur_qp, &buffered_packets_map);
+            destroy_buffered_packets(cur_qp);
+            hmap_remove(&buffered_packets_map, &cur_qp->hmap_node);
+            free(cur_qp);
         }
     }
 }
@@ -2372,10 +2375,11 @@ send_mac_binding_buffered_pkts(struct rconn *swconn)
     OVS_REQUIRES(pinctrl_mutex)
 {
     struct buffered_packets *bp;
-    HMAP_FOR_EACH_POP (bp, hmap_node, &buffered_mac_bindings) {
+    LIST_FOR_EACH_POP (bp, list, &buffered_mac_bindings) {
         buffered_send_packets(swconn, bp, &bp->ea);
         free(bp);
     }
+    ovs_list_init(&buffered_mac_bindings);
 }
 
 static const struct sbrec_mac_binding *
@@ -2493,11 +2497,8 @@ run_buffered_binding(struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
                         ds_cstr(&ip_s));
                 if (b && ovs_scan(b->mac, ETH_ADDR_SCAN_FMT,
                                   ETH_ADDR_SCAN_ARGS(cur_qp->ea))) {
-                    uint32_t hash = hash_bytes(&cur_qp->ip,
-                                               sizeof cur_qp->ip, 0);
                     hmap_remove(&buffered_packets_map, &cur_qp->hmap_node);
-                    hmap_insert(&buffered_mac_bindings, &cur_qp->hmap_node,
-                                hash);
+                    ovs_list_push_back(&buffered_mac_bindings, &cur_qp->list);
                     notify = true;
                 }
                 ds_destroy(&ip_s);
@@ -3050,7 +3051,7 @@ may_inject_pkts(void)
 {
     return (!shash_is_empty(&ipv6_ras) ||
             !shash_is_empty(&send_garp_data) ||
-            !hmap_is_empty(&buffered_mac_bindings));
+            !ovs_list_is_empty(&buffered_mac_bindings));
 }
 
 static void
-- 
2.20.1



More information about the dev mailing list