From 11965c7b47670da7d02eb2c543be52008c66848e Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Tue, 28 May 2019 16:31:05 -0400 Subject: Break out the broom for some cleanup work Maintain the MAINTAINERS file. Removed src/plugins/*.am listings. Added a couple of plugins. Add vlib_process_create (vlib_main_t *vm, char *name, vlib_node_function_t *f, u32 log2_n_stack_bytes); /** @brief Create a vlib process * @param vm &vlib_global_main * @param f the process node function * @param log2_n_stack_bytes size of the process stack, defaults to 16K * @return newly-create node index * @warning call only on the main thread. Barrier sync required. */ This function makes it easy to spin up periodic processes when features are enabled for the first time. That coding pattern is highly recommended. Update the emacs-lisp plugin generator to use vlib_process_create, instead of generating static periodic process nodes. Change-Id: Icda33e93b9034779d3a3e228cd1110af14b058a5 Signed-off-by: Dave Barach --- src/vlib/node.c | 28 ++++++++++++++++++++++++++++ src/vlib/node_funcs.h | 10 ++++++++++ 2 files changed, 38 insertions(+) (limited to 'src') diff --git a/src/vlib/node.c b/src/vlib/node.c index 49c7a40b572..44a3a3ee25d 100644 --- a/src/vlib/node.c +++ b/src/vlib/node.c @@ -757,6 +757,34 @@ done: return error; } +u32 +vlib_process_create (vlib_main_t * vm, char *name, + vlib_node_function_t * f, u32 log2_n_stack_bytes) +{ + vlib_node_registration_t r; + vlib_node_t *n; + + memset (&r, 0, sizeof (r)); + + r.name = (char *) format (0, "%s", name, 0); + r.function = f; + r.process_log2_n_stack_bytes = log2_n_stack_bytes; + r.type = VLIB_NODE_TYPE_PROCESS; + + vlib_worker_thread_barrier_sync (vm); + + vlib_register_node (vm, &r); + vec_free (r.name); + + vlib_worker_thread_node_runtime_update (); + vlib_worker_thread_barrier_release (vm); + + n = vlib_get_node (vm, r.index); + vlib_start_process (vm, n->runtime_index); + + return (r.index); +} + /* * fd.io coding-style-patch-verification: ON * diff --git a/src/vlib/node_funcs.h b/src/vlib/node_funcs.h index bf11a0eb6d4..c9ff93d6124 100644 --- a/src/vlib/node_funcs.h +++ b/src/vlib/node_funcs.h @@ -1186,6 +1186,16 @@ vlib_node_increment_counter (vlib_main_t * vm, u32 node_index, em->counters[node_counter_base_index + counter_index] += increment; } +/** @brief Create a vlib process + * @param vm &vlib_global_main + * @param f the process node function + * @param log2_n_stack_bytes size of the process stack, defaults to 16K + * @return newly-create node index + * @warning call only on the main thread. Barrier sync required + */ +u32 vlib_process_create (vlib_main_t * vm, char *name, + vlib_node_function_t * f, u32 log2_n_stack_bytes); + #endif /* included_vlib_node_funcs_h */ /* -- cgit 1.2.3-korg