X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fthreads.h;h=97df3d253a0792af68229888e84d7596d13d49c0;hb=9aa4ac55b0a205e333e567f87c3cc9379af2363c;hp=e406dde5b07f9a06a28dbf6523756f6c29a67772;hpb=a2b7a02d9c3e03b4923f4153714f43e361960cf0;p=vpp.git diff --git a/src/vlib/threads.h b/src/vlib/threads.h index e406dde5b07..97df3d253a0 100644 --- a/src/vlib/threads.h +++ b/src/vlib/threads.h @@ -75,6 +75,7 @@ typedef struct CLIB_CACHE_LINE_ALIGN_MARK (cacheline1); u32 buffer_index[VLIB_FRAME_SIZE]; + u32 aux_data[VLIB_FRAME_SIZE]; } vlib_frame_queue_elt_t; @@ -101,6 +102,9 @@ typedef struct const char *barrier_caller; const char *barrier_context; volatile u32 *node_reforks_required; + volatile u32 wait_before_barrier; + volatile u32 workers_before_barrier; + volatile u32 done_work_before_barrier; long lwp; int cpu_id; @@ -130,7 +134,10 @@ typedef struct } vlib_frame_queue_t; -typedef struct +struct vlib_frame_queue_main_t_; +typedef u32 (vlib_frame_queue_dequeue_fn_t) ( + vlib_main_t *vm, struct vlib_frame_queue_main_t_ *fqm); +typedef struct vlib_frame_queue_main_t_ { u32 node_index; u32 frame_queue_nelts; @@ -140,6 +147,7 @@ typedef struct /* for frame queue tracing */ frame_queue_trace_t *frame_queue_traces; frame_queue_nelt_counter_t *frame_queue_histogram; + vlib_frame_queue_dequeue_fn_t *frame_queue_dequeue_fn; } vlib_frame_queue_main_t; typedef struct @@ -484,6 +492,17 @@ void vlib_rpc_call_main_thread (void *function, u8 * args, u32 size); void vlib_get_thread_core_numa (vlib_worker_thread_t * w, unsigned cpu_id); vlib_thread_main_t *vlib_get_thread_main_not_inline (void); +/** + * Force workers sync from within worker + * + * Must be paired with @ref vlib_workers_continue + */ +void vlib_workers_sync (void); +/** + * Release barrier after workers sync + */ +void vlib_workers_continue (void); + #endif /* included_vlib_threads_h */ /*