Change-Id: Id39d64bf1b49345a3dc31c63360569212aba6865
Signed-off-by: Florin Coras <fcoras@cisco.com>
#include <svm/svm_fifo_segment.h>
#include <svm/svm_fifo_segment.h>
-svm_fifo_segment_main_t svm_fifo_segment_main;
-
static void
allocate_new_fifo_chunk (svm_fifo_segment_header_t * fsh,
u32 data_size_in_bytes, int chunk_size)
static void
allocate_new_fifo_chunk (svm_fifo_segment_header_t * fsh,
u32 data_size_in_bytes, int chunk_size)
* Create an svm fifo segment and initialize as master
*/
int
* Create an svm fifo segment and initialize as master
*/
int
-svm_fifo_segment_create (svm_fifo_segment_create_args_t * a)
+svm_fifo_segment_create (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_create_args_t * a)
- svm_fifo_segment_main_t *sm = &svm_fifo_segment_main;
svm_fifo_segment_private_t *s;
int rv;
svm_fifo_segment_private_t *s;
int rv;
* Create an svm fifo segment in process-private memory
*/
int
* Create an svm fifo segment in process-private memory
*/
int
-svm_fifo_segment_create_process_private (svm_fifo_segment_create_args_t * a)
+svm_fifo_segment_create_process_private (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_create_args_t * a)
- svm_fifo_segment_main_t *sm = &svm_fifo_segment_main;
svm_fifo_segment_private_t *s;
ssvm_shared_header_t *sh;
u32 rnd_size = 0;
svm_fifo_segment_private_t *s;
ssvm_shared_header_t *sh;
u32 rnd_size = 0;
* Attach as slave to an svm fifo segment
*/
int
* Attach as slave to an svm fifo segment
*/
int
-svm_fifo_segment_attach (svm_fifo_segment_create_args_t * a)
+svm_fifo_segment_attach (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_create_args_t * a)
- svm_fifo_segment_main_t *sm = &svm_fifo_segment_main;
svm_fifo_segment_private_t *s;
int rv;
svm_fifo_segment_private_t *s;
int rv;
-svm_fifo_segment_delete (svm_fifo_segment_private_t * s)
+svm_fifo_segment_delete (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_private_t * s)
- svm_fifo_segment_main_t *sm = &svm_fifo_segment_main;
-
ssvm_delete (&s->ssvm);
clib_memset (s, 0xfe, sizeof (*s));
pool_put (sm->segments, s);
ssvm_delete (&s->ssvm);
clib_memset (s, 0xfe, sizeof (*s));
pool_put (sm->segments, s);
-svm_fifo_segment_main_init (u64 baseva, u32 timeout_in_seconds)
+svm_fifo_segment_main_init (svm_fifo_segment_main_t * sm, u64 baseva,
+ u32 timeout_in_seconds)
- svm_fifo_segment_main_t *sm = &svm_fifo_segment_main;
-
sm->next_baseva = baseva;
sm->timeout_in_seconds = timeout_in_seconds;
}
u32
sm->next_baseva = baseva;
sm->timeout_in_seconds = timeout_in_seconds;
}
u32
-svm_fifo_segment_index (svm_fifo_segment_private_t * s)
+svm_fifo_segment_index (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_private_t * s)
- return s - svm_fifo_segment_main.segments;
+ return s - sm->segments;
}
/**
* Retrieve svm segments pool. Used only for debug purposes.
*/
svm_fifo_segment_private_t *
}
/**
* Retrieve svm segments pool. Used only for debug purposes.
*/
svm_fifo_segment_private_t *
-svm_fifo_segment_segments_pool (void)
+svm_fifo_segment_segments_pool (svm_fifo_segment_main_t * sm)
- svm_fifo_segment_main_t *sm = &svm_fifo_segment_main;
u32 timeout_in_seconds;
} svm_fifo_segment_main_t;
u32 timeout_in_seconds;
} svm_fifo_segment_main_t;
-extern svm_fifo_segment_main_t svm_fifo_segment_main;
-
typedef struct
{
ssvm_segment_type_t segment_type;
typedef struct
{
ssvm_segment_type_t segment_type;
#define svm_fifo_segment_flags(_seg) _seg->h->flags
static inline svm_fifo_segment_private_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_get_segment (svm_fifo_segment_main_t * sm, u32 segment_index)
- svm_fifo_segment_main_t *ssm = &svm_fifo_segment_main;
- return pool_elt_at_index (ssm->segments, segment_index);
+ return pool_elt_at_index (sm->segments, segment_index);
}
int svm_fifo_segment_init (svm_fifo_segment_private_t * s);
}
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);
+int svm_fifo_segment_create (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_create_args_t * a);
+int svm_fifo_segment_create_process_private (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_create_args_t
+ *);
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);
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);
+int svm_fifo_segment_attach (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_create_args_t * a);
+void svm_fifo_segment_delete (svm_fifo_segment_main_t * sm,
+ svm_fifo_segment_private_t * s);
svm_fifo_t *svm_fifo_segment_alloc_fifo (svm_fifo_segment_private_t * s,
u32 data_size_in_bytes,
svm_fifo_t *svm_fifo_segment_alloc_fifo (svm_fifo_segment_private_t * s,
u32 data_size_in_bytes,
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_free_fifo (svm_fifo_segment_private_t * s,
svm_fifo_t * f,
svm_fifo_segment_freelist_t index);
-void svm_fifo_segment_main_init (u64 baseva, u32 timeout_in_seconds);
-u32 svm_fifo_segment_index (svm_fifo_segment_private_t * s);
+void svm_fifo_segment_main_init (svm_fifo_segment_main_t * sm, u64 baseva,
+ u32 timeout_in_seconds);
+u32 svm_fifo_segment_index (svm_fifo_segment_main_t * sm,
+ 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);
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);
+svm_fifo_segment_private_t
+ * svm_fifo_segment_segments_pool (svm_fifo_segment_main_t * sm);
format_function_t format_svm_fifo_segment;
format_function_t format_svm_fifo_segment_type;
format_function_t format_svm_fifo_segment;
format_function_t format_svm_fifo_segment_type;
#include "svm_fifo_segment.h"
#include "svm_fifo_segment.h"
+svm_fifo_segment_main_t segment_main;
+
clib_error_t *
hello_world (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
clib_error_t *
hello_world (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
+ svm_fifo_segment_main_t *sm = &segment_main;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
int rv;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
int rv;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
- rv = svm_fifo_segment_create (a);
+ rv = svm_fifo_segment_create (sm, a);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
- sp = svm_fifo_segment_get_segment (a->new_segment_indices[0]);
+ sp = svm_fifo_segment_get_segment (sm, a->new_segment_indices[0]);
f = svm_fifo_segment_alloc_fifo (sp, 4096, FIFO_SEGMENT_RX_FREELIST);
f = svm_fifo_segment_alloc_fifo (sp, 4096, FIFO_SEGMENT_RX_FREELIST);
master (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
master (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
+ svm_fifo_segment_main_t *sm = &segment_main;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
int rv;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
int rv;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
- rv = svm_fifo_segment_create (a);
+ rv = svm_fifo_segment_create (sm, a);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
- sp = svm_fifo_segment_get_segment (a->new_segment_indices[0]);
+ sp = svm_fifo_segment_get_segment (sm, a->new_segment_indices[0]);
f = svm_fifo_segment_alloc_fifo (sp, 4096, FIFO_SEGMENT_RX_FREELIST);
f = svm_fifo_segment_alloc_fifo (sp, 4096, FIFO_SEGMENT_RX_FREELIST);
mempig (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
mempig (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
+ svm_fifo_segment_main_t *sm = &segment_main;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
svm_fifo_t **flist = 0;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
svm_fifo_t **flist = 0;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
- rv = svm_fifo_segment_create (a);
+ rv = svm_fifo_segment_create (sm, a);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
- sp = svm_fifo_segment_get_segment (a->new_segment_indices[0]);
+ sp = svm_fifo_segment_get_segment (sm, a->new_segment_indices[0]);
for (i = 0; i < 1000; i++)
{
for (i = 0; i < 1000; i++)
{
offset (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
offset (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
+ svm_fifo_segment_main_t *sm = &segment_main;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
int rv;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
int rv;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
a->segment_name = "fifo-test1";
a->segment_size = 256 << 10;
- rv = svm_fifo_segment_create (a);
+ rv = svm_fifo_segment_create (sm, a);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
if (rv)
return clib_error_return (0, "svm_fifo_segment_create returned %d", rv);
- sp = svm_fifo_segment_get_segment (a->new_segment_indices[0]);
+ sp = svm_fifo_segment_get_segment (sm, a->new_segment_indices[0]);
f = svm_fifo_segment_alloc_fifo (sp, 200 << 10, FIFO_SEGMENT_RX_FREELIST);
f = svm_fifo_segment_alloc_fifo (sp, 200 << 10, FIFO_SEGMENT_RX_FREELIST);
slave (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
slave (int verbose)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
+ svm_fifo_segment_main_t *sm = &segment_main;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
ssvm_shared_header_t *sh;
svm_fifo_segment_private_t *sp;
svm_fifo_t *f;
ssvm_shared_header_t *sh;
if (rv)
return clib_error_return (0, "svm_fifo_segment_attach returned %d", rv);
if (rv)
return clib_error_return (0, "svm_fifo_segment_attach returned %d", rv);
- sp = svm_fifo_segment_get_segment (a->new_segment_indices[0]);
+ sp = svm_fifo_segment_get_segment (sm, a->new_segment_indices[0]);
sh = sp->ssvm.sh;
fsh = (svm_fifo_segment_header_t *) sh->opaque[0];
sh = sp->ssvm.sh;
fsh = (svm_fifo_segment_header_t *) sh->opaque[0];
int
test_ssvm_fifo1 (unformat_input_t * input)
{
int
test_ssvm_fifo1 (unformat_input_t * input)
{
+ svm_fifo_segment_main_t *sm = &segment_main;
clib_error_t *error = 0;
int verbose = 0;
int test_id = 0;
clib_error_t *error = 0;
int verbose = 0;
int test_id = 0;
- svm_fifo_segment_main_init (0x200000000ULL, 20);
+ svm_fifo_segment_main_init (sm, 0x200000000ULL, 20);
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
* and all other messages are exchanged using shm IPC. */
u8 use_sock_api;
* and all other messages are exchanged using shm IPC. */
u8 use_sock_api;
- /* convenience */
- svm_fifo_segment_main_t *segment_main;
+ svm_fifo_segment_main_t segment_main;
} echo_main_t;
echo_main_t echo_main;
} echo_main_t;
echo_main_t echo_main;
ssvm_segment_attach (char *name, ssvm_segment_type_t type, int fd)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
ssvm_segment_attach (char *name, ssvm_segment_type_t type, int fd)
{
svm_fifo_segment_create_args_t _a, *a = &_a;
+ svm_fifo_segment_main_t *sm = &echo_main.segment_main;
int rv;
clib_memset (a, 0, sizeof (*a));
int rv;
clib_memset (a, 0, sizeof (*a));
if (type == SSVM_SEGMENT_MEMFD)
a->memfd_fd = fd;
if (type == SSVM_SEGMENT_MEMFD)
a->memfd_fd = fd;
- if ((rv = svm_fifo_segment_attach (a)))
+ if ((rv = svm_fifo_segment_attach (sm, a)))
{
clib_warning ("svm_fifo_segment_attach ('%s') failed", name);
return rv;
{
clib_warning ("svm_fifo_segment_attach ('%s') failed", name);
return rv;
static void
vl_api_map_another_segment_t_handler (vl_api_map_another_segment_t * mp)
{
static void
vl_api_map_another_segment_t_handler (vl_api_map_another_segment_t * mp)
{
+ svm_fifo_segment_main_t *sm = &echo_main.segment_main;
svm_fifo_segment_create_args_t _a, *a = &_a;
int rv;
svm_fifo_segment_create_args_t _a, *a = &_a;
int rv;
a->segment_name = (char *) mp->segment_name;
a->segment_size = mp->segment_size;
/* Attach to the segment vpp created */
a->segment_name = (char *) mp->segment_name;
a->segment_size = mp->segment_size;
/* Attach to the segment vpp created */
- rv = svm_fifo_segment_attach (a);
+ rv = svm_fifo_segment_attach (sm, a);
if (rv)
{
clib_warning ("svm_fifo_segment_attach ('%s') failed",
if (rv)
{
clib_warning ("svm_fifo_segment_attach ('%s') failed",
{
int i_am_server = 1, test_return_packets = 0;
echo_main_t *em = &echo_main;
{
int i_am_server = 1, test_return_packets = 0;
echo_main_t *em = &echo_main;
+ svm_fifo_segment_main_t *sm = &em->segment_main;
unformat_input_t _argv, *a = &_argv;
u8 *chroot_prefix;
u8 *uri = 0;
unformat_input_t _argv, *a = &_argv;
u8 *chroot_prefix;
u8 *uri = 0;
clib_time_init (&em->clib_time);
init_error_string_table (em);
clib_time_init (&em->clib_time);
init_error_string_table (em);
- svm_fifo_segment_main_init (0x200000000ULL, 20);
+ svm_fifo_segment_main_init (sm, 0x200000000ULL, 20);
unformat_init_command_line (a, argv);
while (unformat_check_input (a) != UNFORMAT_END_OF_INPUT)
unformat_init_command_line (a, argv);
while (unformat_check_input (a) != UNFORMAT_END_OF_INPUT)
}
em->i_am_master = i_am_server;
}
em->i_am_master = i_am_server;
- em->segment_main = &svm_fifo_segment_main;
em->test_return_packets = test_return_packets;
em->bytes_to_send = bytes_to_send;
em->time_to_stop = 0;
em->test_return_packets = test_return_packets;
em->bytes_to_send = bytes_to_send;
em->time_to_stop = 0;
/* VNET_API_ERROR_FOO -> "Foo" hash table */
uword *error_string_by_error_number;
/* VNET_API_ERROR_FOO -> "Foo" hash table */
uword *error_string_by_error_number;
- /* convenience */
- svm_fifo_segment_main_t *segment_main;
+ svm_fifo_segment_main_t segment_main;
vl_api_application_attach_reply_t_handler (vl_api_application_attach_reply_t *
mp)
{
vl_api_application_attach_reply_t_handler (vl_api_application_attach_reply_t *
mp)
{
- udp_echo_main_t *utm = &udp_echo_main;
svm_fifo_segment_create_args_t _a = { 0 }, *a = &_a;
svm_fifo_segment_create_args_t _a = { 0 }, *a = &_a;
+ udp_echo_main_t *utm = &udp_echo_main;
+ svm_fifo_segment_main_t *sm = &utm->segment_main;
ASSERT (mp->app_event_queue_address);
/* Attach to the segment vpp created */
ASSERT (mp->app_event_queue_address);
/* Attach to the segment vpp created */
- rv = svm_fifo_segment_attach (a);
+ rv = svm_fifo_segment_attach (sm, a);
if (rv)
{
clib_warning ("svm_fifo_segment_attach ('%s') failed",
if (rv)
{
clib_warning ("svm_fifo_segment_attach ('%s') failed",
static void
vl_api_map_another_segment_t_handler (vl_api_map_another_segment_t * mp)
{
static void
vl_api_map_another_segment_t_handler (vl_api_map_another_segment_t * mp)
{
- udp_echo_main_t *utm = &udp_echo_main;
svm_fifo_segment_create_args_t _a, *a = &_a;
svm_fifo_segment_create_args_t _a, *a = &_a;
+ udp_echo_main_t *utm = &udp_echo_main;
+ svm_fifo_segment_main_t *sm = &utm->segment_main;
svm_fifo_segment_private_t *seg;
int rv;
svm_fifo_segment_private_t *seg;
int rv;
a->segment_name = (char *) mp->segment_name;
a->segment_size = mp->segment_size;
/* Attach to the segment vpp created */
a->segment_name = (char *) mp->segment_name;
a->segment_size = mp->segment_size;
/* Attach to the segment vpp created */
- rv = svm_fifo_segment_attach (a);
+ rv = svm_fifo_segment_attach (sm, a);
if (rv)
{
clib_warning ("svm_fifo_segment_attach ('%s') failed",
mp->segment_name);
return;
}
if (rv)
{
clib_warning ("svm_fifo_segment_attach ('%s') failed",
mp->segment_name);
return;
}
- seg = svm_fifo_segment_get_segment (a->new_segment_indices[0]);
+ seg = svm_fifo_segment_get_segment (sm, a->new_segment_indices[0]);
clib_warning ("Mapped new segment '%s' size %d", seg->ssvm.name,
seg->ssvm.ssvm_size);
hash_set (utm->segments_table, clib_net_to_host_u64 (mp->segment_handle),
clib_warning ("Mapped new segment '%s' size %d", seg->ssvm.name,
seg->ssvm.ssvm_size);
hash_set (utm->segments_table, clib_net_to_host_u64 (mp->segment_handle),
vl_api_unmap_segment_t_handler (vl_api_unmap_segment_t * mp)
{
udp_echo_main_t *utm = &udp_echo_main;
vl_api_unmap_segment_t_handler (vl_api_unmap_segment_t * mp)
{
udp_echo_main_t *utm = &udp_echo_main;
+ svm_fifo_segment_main_t *sm = &utm->segment_main;
svm_fifo_segment_private_t *seg;
u64 *seg_indexp, segment_handle;
svm_fifo_segment_private_t *seg;
u64 *seg_indexp, segment_handle;
return;
}
hash_unset (utm->segments_table, segment_handle);
return;
}
hash_unset (utm->segments_table, segment_handle);
- seg = svm_fifo_segment_get_segment ((u32) seg_indexp[0]);
- svm_fifo_segment_delete (seg);
+ seg = svm_fifo_segment_get_segment (sm, (u32) seg_indexp[0]);
+ svm_fifo_segment_delete (sm, seg);
clib_warning ("Unmapped segment '%s'", segment_handle);
}
clib_warning ("Unmapped segment '%s'", segment_handle);
}
main (int argc, char **argv)
{
udp_echo_main_t *utm = &udp_echo_main;
main (int argc, char **argv)
{
udp_echo_main_t *utm = &udp_echo_main;
+ svm_fifo_segment_main_t *sm = &utm->segment_main;
u8 *uri = (u8 *) "udp://6.0.1.1/1234";
unformat_input_t _argv, *a = &_argv;
int i_am_server = 1;
u8 *uri = (u8 *) "udp://6.0.1.1/1234";
unformat_input_t _argv, *a = &_argv;
int i_am_server = 1;
clib_mem_init_thread_safe (0, 256 << 20);
clib_mem_init_thread_safe (0, 256 << 20);
- svm_fifo_segment_main_init (0x200000000ULL, 20);
+ svm_fifo_segment_main_init (sm, 0x200000000ULL, 20);
vec_validate (utm->rx_buf, 128 << 10);
utm->session_index_by_vpp_handles = hash_create (0, sizeof (uword));
vec_validate (utm->rx_buf, 128 << 10);
utm->session_index_by_vpp_handles = hash_create (0, sizeof (uword));
utm->have_return = 1;
utm->bytes_to_send = 1024;
utm->fifo_size = 128 << 10;
utm->have_return = 1;
utm->bytes_to_send = 1024;
utm->fifo_size = 128 << 10;
- utm->segment_main = &svm_fifo_segment_main;
utm->cut_through_session_index = ~0;
clib_time_init (&utm->clib_time);
utm->cut_through_session_index = ~0;
clib_time_init (&utm->clib_time);
if (type == SSVM_SEGMENT_MEMFD)
a->memfd_fd = fd;
if (type == SSVM_SEGMENT_MEMFD)
a->memfd_fd = fd;
- if ((rv = svm_fifo_segment_attach (a)))
+ if ((rv = svm_fifo_segment_attach (&vcm->segment_main, a)))
{
clib_warning ("svm_fifo_segment_attach ('%s') failed", name);
return rv;
{
clib_warning ("svm_fifo_segment_attach ('%s') failed", name);
return rv;
static void
vcl_segment_detach (u64 segment_handle)
{
static void
vcl_segment_detach (u64 segment_handle)
{
+ svm_fifo_segment_main_t *sm = &vcm->segment_main;
svm_fifo_segment_private_t *segment;
u32 segment_index;
segment_index = vcl_segment_table_lookup (segment_handle);
if (segment_index == (u32) ~ 0)
return;
svm_fifo_segment_private_t *segment;
u32 segment_index;
segment_index = vcl_segment_table_lookup (segment_handle);
if (segment_index == (u32) ~ 0)
return;
- segment = svm_fifo_segment_get_segment (segment_index);
- svm_fifo_segment_delete (segment);
+ segment = svm_fifo_segment_get_segment (sm, segment_index);
+ svm_fifo_segment_delete (sm, segment);
vcl_segment_table_del (segment_handle);
}
vcl_segment_table_del (segment_handle);
}
/** Mapped segments table */
uword *segment_table;
/** Mapped segments table */
uword *segment_table;
+ svm_fifo_segment_main_t segment_main;
+
#ifdef VCL_ELOG
/* VPP Event-logger */
elog_main_t elog_main;
#ifdef VCL_ELOG
/* VPP Event-logger */
elog_main_t elog_main;
vcm->main_pid = getpid ();
vcm->app_name = format (0, "%s", app_name);
vppcom_init_error_string_table ();
vcm->main_pid = getpid ();
vcm->app_name = format (0, "%s", app_name);
vppcom_init_error_string_table ();
- svm_fifo_segment_main_init (vcl_cfg->segment_baseva,
+ svm_fifo_segment_main_init (&vcm->segment_main, vcl_cfg->segment_baseva,
20 /* timeout in secs */ );
pool_alloc (vcm->workers, vcl_cfg->max_workers);
clib_spinlock_init (&vcm->workers_lock);
20 /* timeout in secs */ );
pool_alloc (vcm->workers, vcl_cfg->max_workers);
clib_spinlock_init (&vcm->workers_lock);