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.maxim...@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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev