Copy flags when cloning next_frames
[vpp.git] / vlib / vlib / threads.c
index 405a4d6..2fa5b4f 100644 (file)
@@ -159,7 +159,7 @@ vlib_thread_init (vlib_main_t * vm)
   if (!tm->main_lcore)
     {
       tm->main_lcore = clib_bitmap_first_set(avail_cpu);
-      if (tm->main_lcore == ~0)
+      if (tm->main_lcore == (u8) ~0)
         return clib_error_return (0, "no available cpus to be used for the"
                                   " main thread");
     }
@@ -517,7 +517,7 @@ static clib_error_t * start_workers (vlib_main_t * vm)
 
   /* Set up the main thread */
   vec_add2_aligned (vlib_worker_threads, w, 1, CLIB_CACHE_LINE_BYTES);
-  w->elog_track.name = "thread 0";
+  w->elog_track.name = "main thread";
   elog_track_register (&vm->elog_main, &w->elog_track);
 
   if (vec_len(tm->thread_prefix))
@@ -599,7 +599,8 @@ static clib_error_t * start_workers (vlib_main_t * vm)
             w->instance_id = k;
             w->registration = tr; 
             
-            w->elog_track.name = (char *) format (0, "thread %d", i+1);
+            w->elog_track.name = 
+                (char *) format (0, "%s %d", tr->name, k+1);
             vec_add1 (w->elog_track.name, 0);
             elog_track_register (&vm->elog_main, &w->elog_track);
             
@@ -630,10 +631,13 @@ static clib_error_t * start_workers (vlib_main_t * vm)
               {
                 vlib_next_frame_t *nf = &nm_clone->next_frames[j];
                 u32 save_node_runtime_index;
+                u32 save_flags;
 
                 save_node_runtime_index = nf->node_runtime_index;
+                save_flags = nf->flags;
                 vlib_next_frame_init (nf);
                 nf->node_runtime_index = save_node_runtime_index;
+                nf->flags = save_flags;
               }
 
             /* fork the frame dispatch queue */
@@ -673,8 +677,6 @@ static clib_error_t * start_workers (vlib_main_t * vm)
             clib_mem_set_heap (oldheap);
             vec_add1 (vlib_mains, vm_clone);
 
-            unix_physmem_init (vm_clone, 0 /* physmem not required */);
-
            vm_clone->error_main.counters =
              vec_dup(vlib_mains[0]->error_main.counters);
            vm_clone->error_main.counters_last_clear =
@@ -719,7 +721,8 @@ static clib_error_t * start_workers (vlib_main_t * vm)
               w->thread_function = tr->function;
               w->thread_function_arg = w;
               w->instance_id = j;
-              w->elog_track.name = (char *) format (0, "thread %d", i+1);
+              w->elog_track.name = 
+                  (char *) format (0, "%s %d", tr->name, j+1);
               w->registration = tr;
               vec_add1 (w->elog_track.name, 0);
               elog_track_register (&vm->elog_main, &w->elog_track);
@@ -843,10 +846,13 @@ void vlib_worker_thread_node_runtime_update(void)
         {
           vlib_next_frame_t *nf = &nm_clone->next_frames[j];
           u32 save_node_runtime_index;
+          u32 save_flags;
 
           save_node_runtime_index = nf->node_runtime_index;
+          save_flags = nf->flags;
           vlib_next_frame_init (nf);
           nf->node_runtime_index = save_node_runtime_index;
+          nf->flags = save_flags;
         }
 
       old_nodes_clone = nm_clone->nodes;
@@ -1025,7 +1031,7 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
 
 VLIB_EARLY_CONFIG_FUNCTION (cpu_config, "cpu");
 
-#if !defined (__x86_64__)
+#if !defined (__x86_64__) && !defined (__aarch64__) && !defined (__powerpc64__)
 void __sync_fetch_and_add_8 (void)
 {
   fformat(stderr, "%s called\n", __FUNCTION__);
@@ -1128,6 +1134,7 @@ show_threads_fn (vlib_main_t * vm,
                    "ID", "Name", "Type", "LWP",
                    "lcore", "Core", "Socket", "State");
 
+#if !defined(__powerpc64__)
   for (i = 0; i < vec_len(vlib_worker_threads); i++)
     {
       w = vlib_worker_threads + i;
@@ -1139,6 +1146,7 @@ show_threads_fn (vlib_main_t * vm,
                     w->registration ? w->registration->name : "",
                     w->lwp);
 
+#if DPDK==1
       int lcore = w->dpdk_lcore_id;
       if (lcore > -1)
         {
@@ -1162,10 +1170,11 @@ show_threads_fn (vlib_main_t * vm,
                 line = format(line, "unknown");
             }
         }
-
+#endif
       vlib_cli_output(vm, "%v", line);
       vec_free(line);
     }
+#endif
 
   return 0;
 }