vlib: Replace timer in CLI with an event process
[vpp.git] / src / vlib / main.c
index b6006e8..3c0e754 100644 (file)
@@ -1019,8 +1019,8 @@ format_buffer_metadata (u8 * s, va_list * args)
              (u32) (b->error), (u32) (b->ref_count),
              (u32) (b->buffer_pool_index));
   s = format (s,
-             "trace_index: %d, len_not_first_buf: %d\n",
-             b->trace_index, b->total_length_not_including_first_buffer);
+             "trace_handle: 0x%x, len_not_first_buf: %d\n",
+             b->trace_handle, b->total_length_not_including_first_buffer);
   return s;
 }
 
@@ -1091,7 +1091,8 @@ dispatch_pcap_trace (vlib_main_t * vm,
          if (PREDICT_FALSE (b->flags & VLIB_BUFFER_IS_TRACED))
            {
              vlib_trace_header_t **h
-               = pool_elt_at_index (tm->trace_buffer_pool, b->trace_index);
+               = pool_elt_at_index (tm->trace_buffer_pool,
+                                    vlib_buffer_get_trace_index (b));
 
              vm->pcap_buffer = format (vm->pcap_buffer, "%U%c",
                                        format_vlib_trace, vm, h[0], 0);
@@ -1721,6 +1722,14 @@ vlib_main_or_worker_loop (vlib_main_t * vm, int is_main)
   if (is_main)
     {
       uword i;
+
+      /*
+       * Perform an initial barrier sync. Pays no attention to
+       * the barrier sync hold-down timer scheme, which won't work
+       * at this point in time.
+       */
+      vlib_worker_thread_initial_barrier_sync_and_release (vm);
+
       nm->current_process_index = ~0;
       for (i = 0; i < vec_len (nm->processes); i++)
        cpu_time_now = dispatch_process (vm, nm->processes[i], /* frame */ 0,
@@ -2090,6 +2099,9 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input)
   if ((error = vlib_call_all_config_functions (vm, input, 0 /* is_early */ )))
     goto done;
 
+  /* Sort per-thread init functions before we start threads */
+  vlib_sort_init_exit_functions (&vm->worker_init_function_registrations);
+
   /* Call all main loop enter functions. */
   {
     clib_error_t *sub_error;