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@samsung.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
#include "flow.h"
#include "cmap.h"
#include "coverage.h"
#include "flow.h"
#include "cmap.h"
#include "coverage.h"
#include "latch.h"
#include "list.h"
#include "match.h"
#include "latch.h"
#include "list.h"
#include "match.h"
if (netdev_is_pmd(netdev)) {
int numa_id = netdev_get_numa_id(netdev);
struct dp_netdev_pmd_thread *pmd;
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));
/* Cannot create pmd threads for invalid numa node. */
ovs_assert(ovs_numa_numa_id_is_valid(numa_id));
ovs_mutex_lock(&pmd->poll_mutex);
dp_netdev_add_rxq_to_pmd(pmd, port, port->rxq[i]);
ovs_mutex_unlock(&pmd->poll_mutex);
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);
}
dp_netdev_reload_pmd__(pmd);
}
+ hmapx_destroy(&to_reload);
}
seq_change(dp->port_seq);
}
seq_change(dp->port_seq);