aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Mikhailov (imichail) <imichail@cisco.com>2017-06-15 20:47:48 -0700
committerNeale Ranns <nranns@cisco.com>2017-06-22 20:50:37 +0000
commit65ebc02dc9ea893e1a0408a7d733ba1968b034e3 (patch)
tree0482aa4e9787a63b640651ff90bb804d654552de
parentfc69a971162add81ba768026f2d3deef21f925b5 (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.c42
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);