#define _GNU_SOURCE
#include <vppinfra/format.h>
+#include <vppinfra/linux/sysfs.h>
#include <vlib/vlib.h>
#include <vlib/threads.h>
#include <vlib/unix/unix.h>
-#if DPDK==1
-#include <rte_config.h>
-#include <rte_common.h>
-#include <rte_eal.h>
-#include <rte_launch.h>
-#include <rte_lcore.h>
-#endif
-
static u8 *
format_sched_policy_and_priority (u8 * s, va_list * args)
{
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);
-#if DPDK==1
- ASSERT (lcore <= RTE_MAX_LCORE);
- switch (lcore_config[lcore].state)
- {
- case WAIT:
- line = format (line, "wait");
- break;
- case RUNNING:
- line = format (line, "running");
- break;
- case FINISHED:
- line = format (line, "finished");
- break;
- default:
- line = format (line, "unknown");
- }
-#endif
}
else
{
enable = 1;
else if (unformat (line_input, "off"))
enable = 0;
- else if (unformat (line_input, "index %u"), &index)
+ 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);
if (num_fq == 0)
{
vlib_cli_output (vm, "No frame queues exist\n");
- return error;
+ goto done;
}
// Allocate storage for trace if necessary
memset (fqh, 0, sizeof (*fqh));
fqm->vlib_frame_queues[fqix]->trace = enable;
}
+
+done:
+ unformat_free (line_input);
+
return error;
}
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++)
fqm->vlib_frame_queues[fqix]->nelts = nelts;
}
+done:
+ unformat_free (line_input);
+
return error;
}
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 (threshold == ~(u32) 0)
{
vlib_cli_output (vm, "expecting threshold value\n");
- return error;
+ goto done;
}
if (threshold == 0)
if (num_fq == 0)
{
vlib_cli_output (vm, "No frame queues exist\n");
- return error;
+ goto done;
}
for (fqix = 0; fqix < num_fq; fqix++)
fqm->vlib_frame_queues[fqix]->vector_threshold = threshold;
}
+done:
+ unformat_free (line_input);
+
return error;
}
};
/* *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