vlib: introduce vlib_get_elog_main()
[vpp.git] / src / vlib / main.c
index 111941c..62da7b9 100644 (file)
@@ -570,13 +570,11 @@ vlib_put_next_frame (vlib_main_t * vm,
 }
 
 /* Sync up runtime (32 bit counters) and main node stats (64 bit counters). */
-never_inline void
-vlib_node_runtime_sync_stats (vlib_main_t * vm,
-                             vlib_node_runtime_t * r,
-                             uword n_calls, uword n_vectors, uword n_clocks)
+void
+vlib_node_runtime_sync_stats_node (vlib_node_t *n, vlib_node_runtime_t *r,
+                                  uword n_calls, uword n_vectors,
+                                  uword n_clocks)
 {
-  vlib_node_t *n = vlib_get_node (vm, r->node_index);
-
   n->stats_total.calls += n_calls + r->calls_since_last_overflow;
   n->stats_total.vectors += n_vectors + r->vectors_since_last_overflow;
   n->stats_total.clocks += n_clocks + r->clocks_since_last_overflow;
@@ -588,6 +586,14 @@ vlib_node_runtime_sync_stats (vlib_main_t * vm,
   r->clocks_since_last_overflow = 0;
 }
 
+void
+vlib_node_runtime_sync_stats (vlib_main_t *vm, vlib_node_runtime_t *r,
+                             uword n_calls, uword n_vectors, uword n_clocks)
+{
+  vlib_node_t *n = vlib_get_node (vm, r->node_index);
+  vlib_node_runtime_sync_stats_node (n, r, n_calls, n_vectors, n_clocks);
+}
+
 always_inline void __attribute__ ((unused))
 vlib_process_sync_stats (vlib_main_t * vm,
                         vlib_process_t * p,
@@ -688,7 +694,7 @@ static clib_error_t *
 vlib_cli_elog_clear (vlib_main_t * vm,
                     unformat_input_t * input, vlib_cli_command_t * cmd)
 {
-  elog_reset_buffer (&vm->elog_main);
+  elog_reset_buffer (&vlib_global_main.elog_main);
   return 0;
 }
 
@@ -705,7 +711,7 @@ static clib_error_t *
 elog_save_buffer (vlib_main_t * vm,
                  unformat_input_t * input, vlib_cli_command_t * cmd)
 {
-  elog_main_t *em = &vm->elog_main;
+  elog_main_t *em = &vlib_global_main.elog_main;
   char *file, *chroot_file;
   clib_error_t *error = 0;
 
@@ -759,7 +765,7 @@ static clib_error_t *
 elog_stop (vlib_main_t * vm,
           unformat_input_t * input, vlib_cli_command_t * cmd)
 {
-  elog_main_t *em = &vm->elog_main;
+  elog_main_t *em = &vlib_global_main.elog_main;
 
   em->n_total_events_disable_limit = em->n_total_events;
 
@@ -779,7 +785,7 @@ static clib_error_t *
 elog_restart (vlib_main_t * vm,
              unformat_input_t * input, vlib_cli_command_t * cmd)
 {
-  elog_main_t *em = &vm->elog_main;
+  elog_main_t *em = &vlib_global_main.elog_main;
 
   em->n_total_events_disable_limit = ~0;
 
@@ -799,11 +805,11 @@ static clib_error_t *
 elog_resize_command_fn (vlib_main_t * vm,
                        unformat_input_t * input, vlib_cli_command_t * cmd)
 {
-  elog_main_t *em = &vm->elog_main;
+  elog_main_t *em = &vlib_global_main.elog_main;
   u32 tmp;
 
   /* Stop the parade */
-  elog_reset_buffer (&vm->elog_main);
+  elog_reset_buffer (em);
 
   if (unformat (input, "%d", &tmp))
     {
@@ -830,7 +836,7 @@ VLIB_CLI_COMMAND (elog_resize_cli, static) = {
 static void
 elog_show_buffer_internal (vlib_main_t * vm, u32 n_events_to_show)
 {
-  elog_main_t *em = &vm->elog_main;
+  elog_main_t *em = &vlib_global_main.elog_main;
   elog_event_t *e, *es;
   f64 dt;
 
@@ -896,7 +902,7 @@ vlib_elog_main_loop_event (vlib_main_t * vm,
                           u64 time, u32 n_vectors, u32 is_return)
 {
   vlib_main_t *evm = &vlib_global_main;
-  elog_main_t *em = &evm->elog_main;
+  elog_main_t *em = vlib_get_elog_main ();
   int enabled = evm->elog_trace_graph_dispatch |
     evm->elog_trace_graph_circuit;
 
@@ -1050,13 +1056,9 @@ dispatch_node (vlib_main_t * vm,
                                      /* n_vectors */ n,
                                      /* n_clocks */ t - last_time_stamp);
 
-  /* When in interrupt mode and vector rate crosses threshold switch to
-     polling mode. */
-  if (PREDICT_FALSE ((dispatch_state == VLIB_NODE_STATE_INTERRUPT)
-                    || (dispatch_state == VLIB_NODE_STATE_POLLING
-                        && (node->flags
-                            &
-                            VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE))))
+  /* When in adaptive mode and vector rate crosses threshold switch to
+     polling mode and vice versa. */
+  if (PREDICT_FALSE (node->flags & VLIB_NODE_FLAG_ADAPTIVE_MODE))
     {
       /* *INDENT-OFF* */
       ELOG_TYPE_DECLARE (e) =
@@ -1817,8 +1819,7 @@ vlib_add_del_post_mortem_callback (void *cb, int is_add)
 static void
 elog_post_mortem_dump (void)
 {
-  vlib_main_t *vm = &vlib_global_main;
-  elog_main_t *em = &vm->elog_main;
+  elog_main_t *em = vlib_get_elog_main ();
 
   u8 *filename;
   clib_error_t *error;
@@ -1931,7 +1932,7 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input)
   if (vm->configured_elog_ring_size &&
       vm->configured_elog_ring_size != vm->elog_main.event_ring_size)
     elog_resize (&vm->elog_main, vm->configured_elog_ring_size);
-  vl_api_set_elog_main (&vm->elog_main);
+  vl_api_set_elog_main (vlib_get_elog_main ());
   (void) vl_api_set_elog_trace_api_messages (1);
 
   /* Default name. */
@@ -1962,6 +1963,9 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input)
       goto done;
     }
 
+  /* Register node ifunction variants */
+  vlib_register_all_node_march_variants (vm);
+
   /* Register static nodes so that init functions may use them. */
   vlib_register_all_static_nodes (vm);