From 762d146ab71a41038ddb4ba7809220a80d266d33 Mon Sep 17 00:00:00 2001 From: Ilya Maximets Date: Mon, 8 Feb 2016 18:30:29 +0300 Subject: [PATCH] dpif-netdev: Reload each thread only once in do_add_port. 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 Acked-by: Flavio Leitner Signed-off-by: Daniele Di Proietto --- lib/dpif-netdev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 471d0ac20..e6eec06a4 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" @@ -1177,7 +1178,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)); @@ -1193,8 +1197,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.20.1