FD.io VPP  v19.04.4-rc0-5-ge88582fac
Vector Packet Processing
segment_manager.h File Reference
+ Include dependency graph for segment_manager.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  segment_manager_main_
 
struct  segment_manager_main_init_args_
 

Macros

#define segment_manager_foreach_segment_w_lock(VAR, SM, BODY)
 
#define SEGMENT_MANAGER_INVALID_APP_INDEX   ((u32) ~0)
 

Typedefs

typedef struct _segment_manager_properties segment_manager_properties_t
 
typedef struct _segment_manager segment_manager_t
 
typedef struct segment_manager_main_ segment_manager_main_t
 
typedef struct segment_manager_main_init_args_ segment_manager_main_init_args_t
 

Functions

static segment_manager_tsegment_manager_get (u32 index)
 
static segment_manager_tsegment_manager_get_if_valid (u32 index)
 
static u32 segment_manager_index (segment_manager_t *sm)
 
static svm_msg_q_tsegment_manager_event_queue (segment_manager_t *sm)
 
static u64 segment_manager_make_segment_handle (u32 segment_manager_index, u32 segment_index)
 
u64 segment_manager_segment_handle (segment_manager_t *sm, svm_fifo_segment_private_t *segment)
 
segment_manager_tsegment_manager_new ()
 
int segment_manager_init (segment_manager_t *sm, u32 first_seg_size, u32 prealloc_fifo_pairs)
 Initializes segment manager based on options provided. More...
 
svm_fifo_segment_private_tsegment_manager_get_segment (segment_manager_t *, u32 segment_index)
 Reads a segment from the segment manager's pool without lock. More...
 
svm_fifo_segment_private_tsegment_manager_get_segment_w_handle (u64)
 
svm_fifo_segment_private_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...
 
int segment_manager_add_segment (segment_manager_t *sm, u32 segment_size)
 Adds segment to segment manager's pool. More...
 
void segment_manager_del_segment (segment_manager_t *sm, svm_fifo_segment_private_t *fs)
 Remove segment without lock. More...
 
void segment_manager_segment_reader_unlock (segment_manager_t *sm)
 
void segment_manager_segment_writer_unlock (segment_manager_t *sm)
 
int segment_manager_add_first_segment (segment_manager_t *sm, u32 segment_size)
 
void segment_manager_del_sessions (segment_manager_t *sm)
 Initiate disconnects for all sessions 'owned' by a segment manager. More...
 
void segment_manager_del (segment_manager_t *sm)
 Removes segment manager. More...
 
void segment_manager_init_del (segment_manager_t *sm)
 
u8 segment_manager_has_fifos (segment_manager_t *sm)
 
int segment_manager_alloc_session_fifos (segment_manager_t *sm, svm_fifo_t **server_rx_fifo, svm_fifo_t **server_tx_fifo, u32 *fifo_segment_index)
 
int segment_manager_try_alloc_fifos (svm_fifo_segment_private_t *fs, u32 rx_fifo_size, u32 tx_fifo_size, 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)
 
u32 segment_manager_evt_q_expected_size (u32 q_size)
 
svm_msg_q_tsegment_manager_alloc_queue (svm_fifo_segment_private_t *fs, segment_manager_properties_t *props)
 Allocates shm queue in the first segment. More...
 
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_app_detach (segment_manager_t *sm)
 
void segment_manager_main_init (segment_manager_main_init_args_t *a)
 
segment_manager_properties_tsegment_manager_properties_init (segment_manager_properties_t *sm)
 

Variables

segment_manager_main_t segment_manager_main
 
segment_manager_tsegment_managers
 Pool of segment managers. 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 64 of file segment_manager.h.

◆ SEGMENT_MANAGER_INVALID_APP_INDEX

#define SEGMENT_MANAGER_INVALID_APP_INDEX   ((u32) ~0)

Definition at line 89 of file segment_manager.h.

Typedef Documentation

◆ segment_manager_main_init_args_t

◆ segment_manager_main_t

◆ segment_manager_properties_t

typedef struct _segment_manager_properties segment_manager_properties_t

◆ segment_manager_t

typedef struct _segment_manager segment_manager_t

Function Documentation

◆ segment_manager_add_first_segment()

int segment_manager_add_first_segment ( segment_manager_t sm,
u32  segment_size 
)
+ Here is the caller graph for this function:

◆ segment_manager_add_segment()

int segment_manager_add_segment ( segment_manager_t sm,
u32  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 195 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 ( svm_fifo_segment_private_t segment,
segment_manager_properties_t props 
)

Allocates shm queue in the first segment.

Must be called with lock held

Definition at line 673 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,
svm_fifo_t **  server_rx_fifo,
svm_fifo_t **  server_tx_fifo,
u32 fifo_segment_index 
)

Definition at line 515 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 58 of file segment_manager.c.

+ 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 604 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 710 of file segment_manager.c.

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

◆ segment_manager_del()

void segment_manager_del ( segment_manager_t sm)

Removes segment manager.

Since the fifos allocated in the segment keep backpointers to the sessions prior to removing the segment, we call session disconnect. This subsequently propagates into transport.

Definition at line 435 of file segment_manager.c.

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

◆ segment_manager_del_segment()

void segment_manager_del_segment ( segment_manager_t sm,
svm_fifo_segment_private_t fs 
)

Remove segment without lock.

Definition at line 74 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.

Definition at line 389 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()

static svm_msg_q_t* segment_manager_event_queue ( segment_manager_t sm)
inlinestatic

Definition at line 115 of file segment_manager.h.

+ Here is the caller graph for this function:

◆ segment_manager_evt_q_expected_size()

u32 segment_manager_evt_q_expected_size ( u32  q_size)

Definition at line 651 of file segment_manager.c.

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

◆ segment_manager_get()

static segment_manager_t* segment_manager_get ( u32  index)
inlinestatic

Definition at line 95 of file segment_manager.h.

+ Here is the caller graph for this function:

◆ segment_manager_get_if_valid()

static segment_manager_t* segment_manager_get_if_valid ( u32  index)
inlinestatic

Definition at line 101 of file segment_manager.h.

+ Here is the caller graph for this function:

◆ segment_manager_get_segment()

svm_fifo_segment_private_t* segment_manager_get_segment ( segment_manager_t ,
u32  segment_index 
)

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

Definition at line 126 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_segment_w_handle()

svm_fifo_segment_private_t* segment_manager_get_segment_w_handle ( u64  )

Definition at line 148 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()

svm_fifo_segment_private_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 169 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 360 of file segment_manager.c.

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

◆ segment_manager_index()

static u32 segment_manager_index ( segment_manager_t sm)
inlinestatic

Definition at line 109 of file segment_manager.h.

+ Here is the caller graph for this function:

◆ segment_manager_init()

int segment_manager_init ( segment_manager_t sm,
u32  first_seg_size,
u32  prealloc_fifo_pairs 
)

Initializes segment manager based on options provided.

Returns error if ssvm segment(s) allocation fails.

Definition at line 291 of file segment_manager.c.

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

◆ segment_manager_init_del()

void segment_manager_init_del ( segment_manager_t sm)

Definition at line 464 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 731 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()

static u64 segment_manager_make_segment_handle ( u32  segment_manager_index,
u32  segment_index 
)
inlinestatic

Definition at line 121 of file segment_manager.h.

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

◆ segment_manager_new()

segment_manager_t* segment_manager_new ( )

Definition at line 276 of file segment_manager.c.

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

◆ segment_manager_properties_init()

segment_manager_properties_t* segment_manager_properties_init ( segment_manager_properties_t sm)

Definition at line 42 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_segment_handle()

u64 segment_manager_segment_handle ( segment_manager_t sm,
svm_fifo_segment_private_t segment 
)

Definition at line 132 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 176 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 183 of file segment_manager.c.

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

◆ segment_manager_try_alloc_fifos()

int segment_manager_try_alloc_fifos ( svm_fifo_segment_private_t fs,
u32  rx_fifo_size,
u32  tx_fifo_size,
svm_fifo_t **  rx_fifo,
svm_fifo_t **  tx_fifo 
)

Definition at line 477 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_main

segment_manager_main_t segment_manager_main

Definition at line 20 of file segment_manager.c.

◆ segment_managers

segment_manager_t* segment_managers

Pool of segment managers.