sizeof (fifo_segment_header_t) +
vlib_thread_main.n_vlib_mains * sizeof (fifo_segment_slice_t) +
FIFO_SEGMENT_ALLOC_OVERHEAD;
- segment_size = round_pow2 (segment_size, clib_mem_get_page_size ());
+
+ if (props->huge_page)
+ {
+ uword hugepage_size = clib_mem_get_default_hugepage_size ();
+ segment_size = round_pow2 (segment_size, hugepage_size);
+ fs->ssvm.huge_page = 1;
+ }
+ else
+ segment_size = round_pow2 (segment_size, clib_mem_get_page_size ());
seg_name = format (0, "seg-%u-%u-%u%c", app_wrk->app_index,
app_wrk->wrk_index, smm->seg_name_counter++, 0);
if (!rx_fifo || !tx_fifo)
return;
+ /* Thread that allocated the fifos must be the one to clean them up */
+ ASSERT (rx_fifo->master_thread_index == vlib_get_thread_index () ||
+ rx_fifo->refcnt > 1);
+
/* It's possible to have no segment manager if the session was removed
* as result of a detach. */
if (!(sm = segment_manager_get_if_valid (rx_fifo->segment_manager)))
s = format (s,
"[%u] %v app-wrk: %u segs: %u max-fifo-sz: %U "
"wmarks: %u %u %s flags: 0x%x",
- segment_manager_index (sm), app->name, sm->app_wrk_index,
- pool_elts (sm->segments), format_memory_size, max_fifo_size,
- sm->high_watermark, sm->low_watermark,
+ segment_manager_index (sm), app ? app->name : 0,
+ sm->app_wrk_index, pool_elts (sm->segments), format_memory_size,
+ max_fifo_size, sm->high_watermark, sm->low_watermark,
custom_logic ? "custom-tuning" : "no-tuning", sm->flags);
if (!verbose || !pool_elts (sm->segments))