vlib: barrier sync elog tracing improvements
[vpp.git] / src / vlib / threads_cli.c
index 54cc1ae..bb9ddbc 100644 (file)
@@ -15,6 +15,7 @@
 #define _GNU_SOURCE
 
 #include <vppinfra/format.h>
+#include <vppinfra/linux/sysfs.h>
 #include <vlib/vlib.h>
 
 #include <vlib/threads.h>
@@ -97,14 +98,14 @@ show_threads_fn (vlib_main_t * vm,
          u8 *p = 0;
 
          p = format (p, "%s%u/topology/core_id%c", sys_cpu_path, lcore, 0);
-         vlib_sysfs_read ((char *) p, "%d", &core_id);
+         clib_sysfs_read ((char *) p, "%d", &core_id);
 
          vec_reset_length (p);
          p =
            format (p,
                    "%s%u/topology/physical_package_id%c",
                    sys_cpu_path, lcore, 0);
-         vlib_sysfs_read ((char *) p, "%d", &socket_id);
+         clib_sysfs_read ((char *) p, "%d", &socket_id);
          vec_free (p);
 
          line = format (line, "%-7u%-7u%-7u%", lcore, core_id, socket_id);
@@ -163,21 +164,31 @@ trace_frame_queue (vlib_main_t * vm, unformat_input_t * input,
       else if (unformat (line_input, "index %u", &index))
        ;
       else
-       return clib_error_return (0, "parse error: '%U'",
-                                 format_unformat_error, line_input);
+       {
+         error = clib_error_return (0, "parse error: '%U'",
+                                    format_unformat_error, line_input);
+         goto done;
+       }
     }
 
-  unformat_free (line_input);
-
   if (enable > 1)
-    return clib_error_return (0, "expecting on or off");
+    {
+      error = clib_error_return (0, "expecting on or off");
+      goto done;
+    }
 
   if (vec_len (tm->frame_queue_mains) == 0)
-    return clib_error_return (0, "no worker handoffs exist");
+    {
+      error = clib_error_return (0, "no worker handoffs exist");
+      goto done;
+    }
 
   if (index > vec_len (tm->frame_queue_mains) - 1)
-    return clib_error_return (0,
-                             "expecting valid worker handoff queue index");
+    {
+      error = clib_error_return (0,
+                                "expecting valid worker handoff queue index");
+      goto done;
+    }
 
   fqm = vec_elt_at_index (tm->frame_queue_mains, index);
 
@@ -185,7 +196,7 @@ trace_frame_queue (vlib_main_t * vm, unformat_input_t * input,
   if (num_fq == 0)
     {
       vlib_cli_output (vm, "No frame queues exist\n");
-      return error;
+      goto done;
     }
 
   // Allocate storage for trace if necessary
@@ -204,6 +215,10 @@ trace_frame_queue (vlib_main_t * vm, unformat_input_t * input,
       memset (fqh, 0, sizeof (*fqh));
       fqm->vlib_frame_queues[fqix]->trace = enable;
     }
+
+done:
+  unformat_free (line_input);
+
   return error;
 }
 
@@ -432,28 +447,33 @@ test_frame_queue_nelts (vlib_main_t * vm, unformat_input_t * input,
       else if (unformat (line_input, "index %u", &index))
        ;
       else
-       return clib_error_return (0, "parse error: '%U'",
-                                 format_unformat_error, line_input);
+       {
+         error = clib_error_return (0, "parse error: '%U'",
+                                    format_unformat_error, line_input);
+         goto done;
+       }
     }
 
-  unformat_free (line_input);
-
   if (index > vec_len (tm->frame_queue_mains) - 1)
-    return clib_error_return (0,
-                             "expecting valid worker handoff queue index");
+    {
+      error = clib_error_return (0,
+                                "expecting valid worker handoff queue index");
+      goto done;
+    }
 
   fqm = vec_elt_at_index (tm->frame_queue_mains, index);
 
   if ((nelts != 4) && (nelts != 8) && (nelts != 16) && (nelts != 32))
     {
-      return clib_error_return (0, "expecting 4,8,16,32");
+      error = clib_error_return (0, "expecting 4,8,16,32");
+      goto done;
     }
 
   num_fq = vec_len (fqm->vlib_frame_queues);
   if (num_fq == 0)
     {
       vlib_cli_output (vm, "No frame queues exist\n");
-      return error;
+      goto done;
     }
 
   for (fqix = 0; fqix < num_fq; fqix++)
@@ -461,6 +481,9 @@ test_frame_queue_nelts (vlib_main_t * vm, unformat_input_t * input,
       fqm->vlib_frame_queues[fqix]->nelts = nelts;
     }
 
+done:
+  unformat_free (line_input);
+
   return error;
 }
 
@@ -499,15 +522,19 @@ test_frame_queue_threshold (vlib_main_t * vm, unformat_input_t * input,
       else if (unformat (line_input, "index %u", &index))
        ;
       else
-       return clib_error_return (0, "parse error: '%U'",
-                                 format_unformat_error, line_input);
+       {
+         error = clib_error_return (0, "parse error: '%U'",
+                                    format_unformat_error, line_input);
+         goto done;
+       }
     }
 
-  unformat_free (line_input);
-
   if (index > vec_len (tm->frame_queue_mains) - 1)
-    return clib_error_return (0,
-                             "expecting valid worker handoff queue index");
+    {
+      error = clib_error_return (0,
+                                "expecting valid worker handoff queue index");
+      goto done;
+    }
 
   fqm = vec_elt_at_index (tm->frame_queue_mains, index);
 
@@ -515,7 +542,7 @@ test_frame_queue_threshold (vlib_main_t * vm, unformat_input_t * input,
   if (threshold == ~(u32) 0)
     {
       vlib_cli_output (vm, "expecting threshold value\n");
-      return error;
+      goto done;
     }
 
   if (threshold == 0)
@@ -525,7 +552,7 @@ test_frame_queue_threshold (vlib_main_t * vm, unformat_input_t * input,
   if (num_fq == 0)
     {
       vlib_cli_output (vm, "No frame queues exist\n");
-      return error;
+      goto done;
     }
 
   for (fqix = 0; fqix < num_fq; fqix++)
@@ -533,6 +560,9 @@ test_frame_queue_threshold (vlib_main_t * vm, unformat_input_t * input,
       fqm->vlib_frame_queues[fqix]->vector_threshold = threshold;
     }
 
+done:
+  unformat_free (line_input);
+
   return error;
 }
 
@@ -544,6 +574,28 @@ VLIB_CLI_COMMAND (cmd_test_frame_queue_threshold,static) = {
 };
 /* *INDENT-ON* */
 
+static clib_error_t *
+test_threads_barrier_elog_command_fn (vlib_main_t * vm,
+                                     unformat_input_t * input,
+                                     vlib_cli_command_t * cmd)
+{
+  if (unformat (input, "enable"))
+    vlib_worker_threads->barrier_elog_enabled = 1;
+  else if (unformat (input, "disable"))
+    vlib_worker_threads->barrier_elog_enabled = 0;
+  else
+    return clib_error_return (0, "please choose enable or disable");
+  return 0;
+}
+
+/* *INDENT-OFF* */
+VLIB_CLI_COMMAND (test_elog_vector_length_trigger, static) =
+{
+  .path = "test threads barrier-elog",
+  .short_help = "test threads barrier-elog",
+  .function = test_threads_barrier_elog_command_fn,
+};
+/* *INDENT-ON* */
 
 /*
  * fd.io coding-style-patch-verification: ON