[ovs-dev] [PATCH 1/3] dpif-netdev: Reload each thread only once in do_add_port.

Ilya Maximets i.maximets at samsung.com
Mon Feb 8 15:30:29 UTC 2016


While adding of pmd interface with multiple queues several queues
may be assigned to one thread and this thread will be reloaded
one time for each added queue.

Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
---
 lib/dpif-netdev.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 1b9793b..c477f2b 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -43,6 +43,7 @@
 #include "flow.h"
 #include "cmap.h"
 #include "coverage.h"
+#include "hmapx.h"
 #include "latch.h"
 #include "list.h"
 #include "match.h"
@@ -1139,7 +1140,10 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
     if (netdev_is_pmd(netdev)) {
         int numa_id = netdev_get_numa_id(netdev);
         struct dp_netdev_pmd_thread *pmd;
+        struct hmapx to_reload;
+        struct hmapx_node *node;
 
+        hmapx_init(&to_reload);
         /* Cannot create pmd threads for invalid numa node. */
         ovs_assert(ovs_numa_numa_id_is_valid(numa_id));
 
@@ -1155,8 +1159,14 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
             ovs_mutex_lock(&pmd->poll_mutex);
             dp_netdev_add_rxq_to_pmd(pmd, port, port->rxq[i]);
             ovs_mutex_unlock(&pmd->poll_mutex);
+
+            hmapx_add(&to_reload, pmd);
+        }
+        HMAPX_FOR_EACH (node, &to_reload) {
+            pmd = (struct dp_netdev_pmd_thread *)node->data;
             dp_netdev_reload_pmd__(pmd);
         }
+        hmapx_destroy(&to_reload);
     }
     seq_change(dp->port_seq);
 
-- 
2.5.0




More information about the dev mailing list