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

Ilya Maximets i.maximets at samsung.com
Thu Feb 4 13:41:48 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.

Fix this by storing each PMD thread that needs to be reloaded
and then reloading only once.

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 f233b61..1116886 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"
@@ -1138,7 +1139,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));
 
@@ -1154,8 +1158,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