X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fsvm%2Fsvm_fifo_segment.h;h=1872da169f9180c461486ee9c0d1ea3193f21893;hb=f8f516a8b0ccab2f5d9796f90419bf2661c750af;hp=7c97e9b489ff1a9d62a1190c7bac7ab27746d22a;hpb=91f3e744a37b9f6f3c87ac45e54142f16fd2d3d5;p=vpp.git diff --git a/src/svm/svm_fifo_segment.h b/src/svm/svm_fifo_segment.h index 7c97e9b489f..1872da169f9 100644 --- a/src/svm/svm_fifo_segment.h +++ b/src/svm/svm_fifo_segment.h @@ -15,8 +15,8 @@ #ifndef __included_ssvm_fifo_segment_h__ #define __included_ssvm_fifo_segment_h__ -#include #include +#include #include typedef enum @@ -31,13 +31,12 @@ typedef enum #define FIFO_SEGMENT_MAX_FIFO_SIZE (8<<20) /* 8mb max fifo size */ #define FIFO_SEGMENT_ALLOC_CHUNK_SIZE 32 /* Allocation quantum */ -#define FIFO_SEGMENT_F_IS_PRIVATE 1 << 0 /* Private segment */ -#define FIFO_SEGMENT_F_IS_MAIN_HEAP 1 << 1 /* Segment is main heap */ +#define FIFO_SEGMENT_F_IS_PREALLOCATED (1 << 0) +#define FIFO_SEGMENT_F_WILL_DELETE (1 << 1) typedef struct { svm_fifo_t *fifos; /**< Linked list of active RX fifos */ - u8 *segment_name; /**< Segment name */ svm_fifo_t **free_fifos; /**< Freelists, by fifo size */ u32 n_active_fifos; /**< Number of active fifos */ u8 flags; /**< Segment flags */ @@ -64,21 +63,20 @@ extern svm_fifo_segment_main_t svm_fifo_segment_main; typedef struct { + ssvm_segment_type_t segment_type; char *segment_name; u32 segment_size; u32 *new_segment_indices; - u32 rx_fifo_size; - u32 tx_fifo_size; - u32 preallocated_fifo_pairs; - u32 private_segment_count; - u32 private_segment_size; + int memfd_fd; } svm_fifo_segment_create_args_t; +#define svm_fifo_segment_flags(_seg) _seg->h->flags + static inline svm_fifo_segment_private_t * svm_fifo_segment_get_segment (u32 segment_index) { svm_fifo_segment_main_t *ssm = &svm_fifo_segment_main; - return vec_elt_at_index (ssm->segments, segment_index); + return pool_elt_at_index (ssm->segments, segment_index); } static inline u8 @@ -93,19 +91,14 @@ svm_fifo_segment_get_fifo_list (svm_fifo_segment_private_t * fifo_segment) return fifo_segment->h->fifos; } -#define foreach_ssvm_fifo_segment_api_error \ -_(OUT_OF_SPACE, "Out of space in segment", -200) - -typedef enum -{ -#define _(n,s,c) SSVM_FIFO_SEGMENT_API_ERROR_##n = c, - foreach_ssvm_fifo_segment_api_error -#undef _ -} ssvm_fifo_segment_api_error_enum_t; - +int svm_fifo_segment_init (svm_fifo_segment_private_t * s); int svm_fifo_segment_create (svm_fifo_segment_create_args_t * a); int svm_fifo_segment_create_process_private (svm_fifo_segment_create_args_t * a); +void svm_fifo_segment_preallocate_fifo_pairs (svm_fifo_segment_private_t * s, + u32 rx_fifo_size, + u32 tx_fifo_size, + u32 * n_fifo_pairs); int svm_fifo_segment_attach (svm_fifo_segment_create_args_t * a); void svm_fifo_segment_delete (svm_fifo_segment_private_t * s); @@ -115,14 +108,18 @@ svm_fifo_t *svm_fifo_segment_alloc_fifo (svm_fifo_segment_private_t * s, void svm_fifo_segment_free_fifo (svm_fifo_segment_private_t * s, svm_fifo_t * f, svm_fifo_segment_freelist_t index); -void svm_fifo_segment_init (u64 baseva, u32 timeout_in_seconds); +void svm_fifo_segment_main_init (u64 baseva, u32 timeout_in_seconds); u32 svm_fifo_segment_index (svm_fifo_segment_private_t * s); u32 svm_fifo_segment_num_fifos (svm_fifo_segment_private_t * fifo_segment); u32 svm_fifo_segment_num_free_fifos (svm_fifo_segment_private_t * fifo_segment, u32 fifo_size_in_bytes); +void svm_fifo_segment_info (svm_fifo_segment_private_t * seg, uword * address, + u64 * size); svm_fifo_segment_private_t *svm_fifo_segment_segments_pool (void); + format_function_t format_svm_fifo_segment; +format_function_t format_svm_fifo_segment_type; #endif /* __included_ssvm_fifo_segment_h__ */