FD.io VPP  v20.09-64-g4f7b92f0a
Vector Packet Processing
segment_manager.c File Reference
+ Include dependency graph for segment_manager.c:

Go to the source code of this file.

Data Structures

struct  segment_manager_main_
 

Macros

#define segment_manager_foreach_segment_w_lock(VAR, SM, BODY)
 

Typedefs

typedef struct segment_manager_main_ segment_manager_main_t
 

Functions

static segment_manager_props_tsegment_manager_properties_get (segment_manager_t *sm)
 
segment_manager_props_tsegment_manager_props_init (segment_manager_props_t *props)
 
u8 segment_manager_app_detached (segment_manager_t *sm)
 
void segment_manager_app_detach (segment_manager_t *sm)
 
static u32 segment_manager_segment_index (segment_manager_t *sm, fifo_segment_t *seg)
 
int segment_manager_add_segment (segment_manager_t *sm, uword segment_size)
 Adds segment to segment manager's pool. More...
 
void segment_manager_del_segment (segment_manager_t *sm, fifo_segment_t *fs)
 Remove segment without lock. More...
 
static fifo_segment_tsegment_manager_get_segment_if_valid (segment_manager_t *sm, u32 segment_index)
 
static void segment_manager_lock_and_del_segment (segment_manager_t *sm, u32 fs_index)
 Removes segment after acquiring writer lock. More...
 
fifo_segment_tsegment_manager_get_segment (segment_manager_t *sm, u32 segment_index)
 Reads a segment from the segment manager's pool without lock. More...
 
u64 segment_manager_segment_handle (segment_manager_t *sm, fifo_segment_t *segment)
 
u64 segment_manager_make_segment_handle (u32 segment_manager_index, u32 segment_index)
 
fifo_segment_tsegment_manager_get_segment_w_handle (u64 segment_handle)
 
fifo_segment_tsegment_manager_get_segment_w_lock (segment_manager_t *sm, u32 segment_index)
 Reads a segment from the segment manager's pool and acquires reader lock. More...
 
void segment_manager_segment_reader_lock (segment_manager_t *sm)
 
void segment_manager_segment_reader_unlock (segment_manager_t *sm)
 
void segment_manager_segment_writer_unlock (segment_manager_t *sm)
 
segment_manager_tsegment_manager_alloc (void)
 
int segment_manager_init (segment_manager_t *sm)
 Initializes segment manager based on options provided. More...
 
void segment_manager_cleanup_detached_listener (segment_manager_t *sm)
 
void segment_manager_free (segment_manager_t *sm)
 Cleanup segment manager. More...
 
void segment_manager_init_free (segment_manager_t *sm)
 Initiate segment manager cleanup. More...
 
segment_manager_tsegment_manager_get (u32 index)
 
segment_manager_tsegment_manager_get_if_valid (u32 index)
 
u32 segment_manager_index (segment_manager_t *sm)
 
u8 segment_manager_has_fifos (segment_manager_t *sm)
 
void segment_manager_del_sessions (segment_manager_t *sm)
 Initiate disconnects for all sessions 'owned' by a segment manager. More...
 
int segment_manager_try_alloc_fifos (fifo_segment_t *fifo_segment, u32 thread_index, u32 rx_fifo_size, u32 tx_fifo_size, svm_fifo_t **rx_fifo, svm_fifo_t **tx_fifo)
 
int segment_manager_alloc_session_fifos (segment_manager_t *sm, u32 thread_index, svm_fifo_t **rx_fifo, svm_fifo_t **tx_fifo)
 
void segment_manager_dealloc_fifos (svm_fifo_t *rx_fifo, svm_fifo_t *tx_fifo)
 
void segment_manager_detach_fifo (segment_manager_t *sm, svm_fifo_t *f)
 
void segment_manager_attach_fifo (segment_manager_t *sm, svm_fifo_t *f, session_t *s)
 
u32 segment_manager_evt_q_expected_size (u32 q_len)
 
svm_msg_q_tsegment_manager_alloc_queue (fifo_segment_t *segment, segment_manager_props_t *props)
 Allocates shm queue in the first segment. More...
 
svm_msg_q_tsegment_manager_event_queue (segment_manager_t *sm)
 
void segment_manager_dealloc_queue (segment_manager_t *sm, svm_queue_t *q)
 Frees shm queue allocated in the first segment. More...
 
void segment_manager_main_init (segment_manager_main_init_args_t *a)
 
static clib_error_tsegment_manager_show_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
void segment_manager_format_sessions (segment_manager_t *sm, int verbose)
 
void segment_manager_set_watermarks (segment_manager_t *sm, u8 high_watermark, u8 low_watermark)
 

Variables

static segment_manager_main_t sm_main
 
static vlib_cli_command_t segment_manager_show_command
 (constructor) VLIB_CLI_COMMAND (segment_manager_show_command) More...
 

Macro Definition Documentation

◆ segment_manager_foreach_segment_w_lock

#define segment_manager_foreach_segment_w_lock (   VAR,
  SM,
  BODY 
)
Value:
do { \
clib_rwlock_reader_lock (&(SM)->segments_rwlock); \
pool_foreach((VAR), ((SM)->segments), (BODY)); \
clib_rwlock_reader_unlock (&(SM)->segments_rwlock); \
} while (0)

Definition at line 39 of file segment_manager.c.

Typedef Documentation

◆ segment_manager_main_t

Function Documentation

◆ segment_manager_add_segment()

int segment_manager_add_segment ( segment_manager_t sm,
uword  segment_size 
)

Adds segment to segment manager's pool.

If needed a writer's lock is acquired before allocating a new segment to avoid affecting any of the segments pool readers.

Definition at line 92 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_alloc()

segment_manager_t* segment_manager_alloc ( void  )

Definition at line 319 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_alloc_queue()

svm_msg_q_t* segment_manager_alloc_queue ( fifo_segment_t segment,
segment_manager_props_t props 
)

Allocates shm queue in the first segment.

Must be called with lock held

Definition at line 820 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_alloc_session_fifos()

int segment_manager_alloc_session_fifos ( segment_manager_t sm,
u32  thread_index,
svm_fifo_t **  rx_fifo,
svm_fifo_t **  tx_fifo 
)

Definition at line 625 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_app_detach()

void segment_manager_app_detach ( segment_manager_t sm)

Definition at line 74 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_app_detached()

u8 segment_manager_app_detached ( segment_manager_t sm)

Definition at line 68 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_attach_fifo()

void segment_manager_attach_fifo ( segment_manager_t sm,
svm_fifo_t f,
session_t s 
)

Definition at line 784 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_cleanup_detached_listener()

void segment_manager_cleanup_detached_listener ( segment_manager_t sm)

Definition at line 429 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_dealloc_fifos()

void segment_manager_dealloc_fifos ( svm_fifo_t rx_fifo,
svm_fifo_t tx_fifo 
)

Definition at line 729 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_dealloc_queue()

void segment_manager_dealloc_queue ( segment_manager_t sm,
svm_queue_t q 
)

Frees shm queue allocated in the first segment.

Definition at line 864 of file segment_manager.c.

+ Here is the call graph for this function:

◆ segment_manager_del_segment()

void segment_manager_del_segment ( segment_manager_t sm,
fifo_segment_t fs 
)

Remove segment without lock.

Definition at line 189 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_del_sessions()

void segment_manager_del_sessions ( segment_manager_t sm)

Initiate disconnects for all sessions 'owned' by a segment manager.

Cleanup segment manager sessions.

Definition at line 538 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_detach_fifo()

void segment_manager_detach_fifo ( segment_manager_t sm,
svm_fifo_t f 
)

Definition at line 774 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_event_queue()

svm_msg_q_t* segment_manager_event_queue ( segment_manager_t sm)

Definition at line 855 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_evt_q_expected_size()

u32 segment_manager_evt_q_expected_size ( u32  q_len)

Definition at line 798 of file segment_manager.c.

+ Here is the call graph for this function:

◆ segment_manager_format_sessions()

void segment_manager_format_sessions ( segment_manager_t sm,
int  verbose 
)

Definition at line 977 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_free()

void segment_manager_free ( segment_manager_t sm)

Cleanup segment manager.

Parameters
smsegment manager to be freed

Definition at line 444 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_get()

segment_manager_t* segment_manager_get ( u32  index)

Definition at line 489 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_if_valid()

segment_manager_t* segment_manager_get_if_valid ( u32  index)

Definition at line 495 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_segment()

fifo_segment_t* segment_manager_get_segment ( segment_manager_t sm,
u32  segment_index 
)

Reads a segment from the segment manager's pool without lock.

Definition at line 252 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_segment_if_valid()

static fifo_segment_t* segment_manager_get_segment_if_valid ( segment_manager_t sm,
u32  segment_index 
)
static

Definition at line 215 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_segment_w_handle()

fifo_segment_t* segment_manager_get_segment_w_handle ( u64  segment_handle)

Definition at line 273 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_get_segment_w_lock()

fifo_segment_t* segment_manager_get_segment_w_lock ( segment_manager_t sm,
u32  segment_index 
)

Reads a segment from the segment manager's pool and acquires reader lock.

Caller must drop the reader's lock by calling segment_manager_segment_reader_unlock once it finishes working with the segment.

Definition at line 294 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_has_fifos()

u8 segment_manager_has_fifos ( segment_manager_t sm)

Definition at line 509 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_index()

u32 segment_manager_index ( segment_manager_t sm)

Definition at line 503 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_init()

int segment_manager_init ( segment_manager_t sm)

Initializes segment manager based on options provided.

Returns error if ssvm segment(s) allocation fails.

Definition at line 334 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_init_free()

void segment_manager_init_free ( segment_manager_t sm)

Initiate segment manager cleanup.

Parameters
smsegment manager to be freed

Definition at line 476 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_lock_and_del_segment()

static void segment_manager_lock_and_del_segment ( segment_manager_t sm,
u32  fs_index 
)
inlinestatic

Removes segment after acquiring writer lock.

Definition at line 227 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_main_init()

void segment_manager_main_init ( segment_manager_main_init_args_t a)

Definition at line 885 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_make_segment_handle()

u64 segment_manager_make_segment_handle ( u32  segment_manager_index,
u32  segment_index 
)

Definition at line 266 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_properties_get()

static segment_manager_props_t* segment_manager_properties_get ( segment_manager_t sm)
static

Definition at line 47 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_props_init()

segment_manager_props_t* segment_manager_props_init ( segment_manager_props_t props)

Definition at line 54 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_segment_handle()

u64 segment_manager_segment_handle ( segment_manager_t sm,
fifo_segment_t segment 
)

Definition at line 258 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_segment_index()

static u32 segment_manager_segment_index ( segment_manager_t sm,
fifo_segment_t seg 
)
inlinestatic

Definition at line 80 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_segment_reader_lock()

void segment_manager_segment_reader_lock ( segment_manager_t sm)

Definition at line 301 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_segment_reader_unlock()

void segment_manager_segment_reader_unlock ( segment_manager_t sm)

Definition at line 307 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_segment_writer_unlock()

void segment_manager_segment_writer_unlock ( segment_manager_t sm)

Definition at line 313 of file segment_manager.c.

+ Here is the call graph for this function:

◆ segment_manager_set_watermarks()

void segment_manager_set_watermarks ( segment_manager_t sm,
u8  high_watermark,
u8  low_watermark 
)

Definition at line 1039 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_show_fn()

static clib_error_t* segment_manager_show_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 904 of file segment_manager.c.

+ Here is the call graph for this function:

◆ segment_manager_try_alloc_fifos()

int segment_manager_try_alloc_fifos ( fifo_segment_t fifo_segment,
u32  thread_index,
u32  rx_fifo_size,
u32  tx_fifo_size,
svm_fifo_t **  rx_fifo,
svm_fifo_t **  tx_fifo 
)

Definition at line 586 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ segment_manager_show_command

vlib_cli_command_t segment_manager_show_command
static
Initial value:
=
{
.path = "show segment-manager",
.short_help = "show segment-manager [segments][verbose]",
}
static clib_error_t * segment_manager_show_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (segment_manager_show_command)

Definition at line 968 of file segment_manager.c.

◆ sm_main

segment_manager_main_t sm_main
static

Definition at line 37 of file segment_manager.c.