vlib: make runtime_data handling thread-local 71/7171/7
authorIgor Mikhailov (imichail) <imichail@cisco.com>
Fri, 16 Jun 2017 03:47:48 +0000 (20:47 -0700)
committerDamjan Marion <dmarion.lists@gmail.com>
Tue, 20 Jun 2017 21:47:07 +0000 (21:47 +0000)
Change-Id: Ic2f2dc234199a5f882846880cbacff20fc8d477b
Signed-off-by: Igor Mikhailov (imichail) <imichail@cisco.com>
src/vnet/interface.c

index 41e2186..e9042ae 100644 (file)
@@ -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);