This reduces code duplication. Additionally dp_netdev_free will not reconfigure datapath on each removed port.
Signed-off-by: Ilya Maximets <[email protected]> --- lib/dpif-netdev.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index f6552da..8e9a623 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -561,7 +561,8 @@ static void dp_netdev_free(struct dp_netdev *) static int do_add_port(struct dp_netdev *dp, const char *devname, const char *type, odp_port_t port_no) OVS_REQUIRES(dp->port_mutex); -static void do_del_port(struct dp_netdev *dp, struct dp_netdev_port *) +static void do_del_port(struct dp_netdev *dp, struct dp_netdev_port *, + bool port_in_datapath) OVS_REQUIRES(dp->port_mutex); static int dpif_netdev_open(const struct dpif_class *, const char *name, bool create, struct dpif **); @@ -1150,12 +1151,13 @@ dp_netdev_free(struct dp_netdev *dp) shash_find_and_delete(&dp_netdevs, dp->name); + dp_netdev_destroy_all_pmds(dp, true); + ovs_mutex_lock(&dp->port_mutex); HMAP_FOR_EACH_SAFE (port, next, node, &dp->ports) { - do_del_port(dp, port); + do_del_port(dp, port, false); } ovs_mutex_unlock(&dp->port_mutex); - dp_netdev_destroy_all_pmds(dp, true); cmap_destroy(&dp->poll_threads); ovs_mutex_destroy(&dp->non_pmd_mutex); @@ -1399,7 +1401,7 @@ dpif_netdev_port_del(struct dpif *dpif, odp_port_t port_no) error = get_port_by_number(dp, port_no, &port); if (!error) { - do_del_port(dp, port); + do_del_port(dp, port, true); } } ovs_mutex_unlock(&dp->port_mutex); @@ -1495,13 +1497,16 @@ has_pmd_port(struct dp_netdev *dp) } static void -do_del_port(struct dp_netdev *dp, struct dp_netdev_port *port) +do_del_port(struct dp_netdev *dp, struct dp_netdev_port *port, + bool port_in_datapath) OVS_REQUIRES(dp->port_mutex) { hmap_remove(&dp->ports, &port->node); seq_change(dp->port_seq); - reconfigure_datapath(dp); + if (port_in_datapath) { + reconfigure_datapath(dp); + } port_destroy(port); } @@ -3243,17 +3248,12 @@ reconfigure_datapath(struct dp_netdev *dp) * not being used by any pmd thread at the moment. If a port fails to * reconfigure we remove it from the datapath. */ HMAP_FOR_EACH(port, node, &dp->ports) { - int err; - if (!port->need_reconfigure) { continue; } - err = port_reconfigure(port); - if (err) { - hmap_remove(&dp->ports, &port->node); - seq_change(dp->port_seq); - port_destroy(port); + if (port_reconfigure(port)) { + do_del_port(dp, port, false); } else { port->dynamic_txqs = netdev_n_txq(port->netdev) < wanted_txqs; } -- 2.7.4 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
