From: Igor Mikhailov (imichail) Date: Fri, 16 Jun 2017 03:47:48 +0000 (-0700) Subject: vlib: make runtime_data handling thread-local X-Git-Tag: v17.07-rc1~22 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F71%2F7171%2F7;p=vpp.git vlib: make runtime_data handling thread-local Change-Id: Ic2f2dc234199a5f882846880cbacff20fc8d477b Signed-off-by: Igor Mikhailov (imichail) --- diff --git a/src/vnet/interface.c b/src/vnet/interface.c index 41e218642f7..e9042ae8580 100644 --- a/src/vnet/interface.c +++ b/src/vnet/interface.c @@ -750,7 +750,6 @@ vnet_register_interface (vnet_main_t * vnm, if (vec_len (im->deleted_hw_interface_nodes) > 0) { vnet_hw_interface_nodes_t *hn; - vnet_interface_output_runtime_t *rt; vlib_node_t *node; vlib_node_runtime_t *nrt; @@ -762,17 +761,23 @@ vnet_register_interface (vnet_main_t * vnm, vlib_node_rename (vm, hw->tx_node_index, "%v", tx_node_name); vlib_node_rename (vm, hw->output_node_index, "%v", output_node_name); - rt = vlib_node_get_runtime_data (vm, hw->output_node_index); - ASSERT (rt->is_deleted == 1); - rt->is_deleted = 0; - rt->hw_if_index = hw_index; - rt->sw_if_index = hw->sw_if_index; - rt->dev_instance = hw->dev_instance; + /* *INDENT-OFF* */ + foreach_vlib_main ({ + vnet_interface_output_runtime_t *rt; - rt = vlib_node_get_runtime_data (vm, hw->tx_node_index); - rt->hw_if_index = hw_index; - rt->sw_if_index = hw->sw_if_index; - rt->dev_instance = hw->dev_instance; + rt = vlib_node_get_runtime_data (this_vlib_main, hw->output_node_index); + ASSERT (rt->is_deleted == 1); + rt->is_deleted = 0; + rt->hw_if_index = hw_index; + rt->sw_if_index = hw->sw_if_index; + rt->dev_instance = hw->dev_instance; + + rt = vlib_node_get_runtime_data (this_vlib_main, hw->tx_node_index); + rt->hw_if_index = hw_index; + rt->sw_if_index = hw->sw_if_index; + rt->dev_instance = hw->dev_instance; + }); + /* *INDENT-ON* */ /* The new class may differ from the old one. * Functions have to be updated. */ @@ -790,7 +795,6 @@ vnet_register_interface (vnet_main_t * vnm, nrt = vlib_node_get_runtime (vm, hw->tx_node_index); nrt->function = node->function; - vlib_worker_thread_node_runtime_update (); _vec_len (im->deleted_hw_interface_nodes) -= 1; } else @@ -909,11 +913,17 @@ vnet_delete_hw_interface (vnet_main_t * vnm, u32 hw_if_index) { vnet_hw_interface_nodes_t *dn; - vnet_interface_output_runtime_t *rt = - vlib_node_get_runtime_data (vm, hw->output_node_index); - /* Mark node runtime as deleted so output node (if called) will drop packets. */ - rt->is_deleted = 1; + /* *INDENT-OFF* */ + foreach_vlib_main ({ + vnet_interface_output_runtime_t *rt = + vlib_node_get_runtime_data (this_vlib_main, hw->output_node_index); + + /* Mark node runtime as deleted so output node (if called) + * will drop packets. */ + rt->is_deleted = 1; + }); + /* *INDENT-ON* */ vlib_node_rename (vm, hw->output_node_index, "interface-%d-output-deleted", hw_if_index);