diff options
author | Igor Mikhailov (imichail) <imichail@cisco.com> | 2017-06-15 20:47:48 -0700 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2017-06-22 20:50:37 +0000 |
commit | 65ebc02dc9ea893e1a0408a7d733ba1968b034e3 (patch) | |
tree | 0482aa4e9787a63b640651ff90bb804d654552de | |
parent | fc69a971162add81ba768026f2d3deef21f925b5 (diff) |
vlib: make runtime_data handling thread-local
Change-Id: Ic2f2dc234199a5f882846880cbacff20fc8d477b
Signed-off-by: Igor Mikhailov (imichail) <imichail@cisco.com>
(cherry picked from commit 8249a588e9a60a813719475adf33cf793e420839)
-rw-r--r-- | src/vnet/interface.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/src/vnet/interface.c b/src/vnet/interface.c index 2a1e70e8927..48aab59521e 100644 --- a/src/vnet/interface.c +++ b/src/vnet/interface.c @@ -743,7 +743,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; @@ -755,17 +754,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. */ @@ -783,7 +788,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 @@ -902,11 +906,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); |