X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fmain.h;h=8b6f94786196ccd0be12ee1f5eb462bacbe16831;hb=2108c0c6daeb39a0619ace66189cc20e049a3c79;hp=4c0cde3ff455db28eba44b708362cacfea712355;hpb=49d66f1f42cbc310e4fa0dc526b9fdb91d0ca220;p=vpp.git diff --git a/src/vlib/main.h b/src/vlib/main.h index 4c0cde3ff45..8b6f9478619 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -58,6 +58,7 @@ typedef struct vlib_main_t { + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); /* Instruction level timing state. */ clib_time_t clib_time; @@ -85,6 +86,8 @@ typedef struct vlib_main_t /* Jump target to exit main loop with given code. */ u32 main_loop_exit_set; + /* Set e.g. in the SIGTERM signal handler, checked in a safe place... */ + volatile u32 main_loop_exit_now; clib_longjmp_t main_loop_exit; #define VLIB_MAIN_LOOP_EXIT_NONE 0 #define VLIB_MAIN_LOOP_EXIT_PANIC 1 @@ -97,13 +100,20 @@ typedef struct vlib_main_t /* Name for e.g. syslog. */ char *name; - /* Start and size of CLIB heap. */ + /* Start of the heap. */ void *heap_base; + + /* Truncated version, to create frame indices */ + void *heap_aligned_base; + + /* Size of the heap */ uword heap_size; - vlib_buffer_main_t *buffer_main; + /* Pool of buffer free lists. */ + vlib_buffer_free_list_t *buffer_free_list_pool; - vlib_physmem_main_t physmem_main; + /* List of free-lists needing Blue Light Special announcements */ + vlib_buffer_free_list_t **buffer_announce_list; /* Allocate/free buffer memory for DMA transfers, descriptor rings, etc. buffer memory is guaranteed to be cache-aligned. */ @@ -170,8 +180,6 @@ typedef struct vlib_main_t /* to compare with node runtime */ u32 thread_index; - void **mbuf_alloc_list; - /* List of init functions to call, setup by constructors */ _vlib_init_function_list_elt_t *init_function_registrations; _vlib_init_function_list_elt_t *worker_init_function_registrations; @@ -199,6 +207,18 @@ typedef struct vlib_main_t */ int need_vlib_worker_thread_node_runtime_update; + /* + * Barrier epoch - Set to current time, each time barrier_sync or + * barrier_release is called with zero recursion. + */ + f64 barrier_epoch; + + /* Earliest barrier can be closed again */ + f64 barrier_no_close_before; + + /* Vector of pending RPC requests */ + uword *pending_rpc_requests; + } vlib_main_t; /* Global main structure. */ @@ -331,6 +351,9 @@ vlib_increment_main_loop_counter (vlib_main_t * vm) vm->main_loop_nodes_processed = 0; vm->vector_counts_per_main_loop[i] = v; vm->node_counts_per_main_loop[i] = n; + + if (PREDICT_FALSE (vm->main_loop_exit_now)) + clib_longjmp (&vm->main_loop_exit, VLIB_MAIN_LOOP_EXIT_CLI); } always_inline void vlib_set_queue_signal_callback