vlib_mains == 0 special cases be gone
Clean up spurious binary API client link dependency on libvlib.so, which managed to hide behind vlib_mains == 0 checks reached by VLIB_xxx_FUNCTION macros. Change-Id: I5df1f8ab07dca1944250e643ccf06e60a8462325 Signed-off-by: Dave Barach <dave@barachs.net>
This commit is contained in:
@@ -380,13 +380,9 @@ dpdk_ipsec_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
|
||||
im->cb.check_support_cb = dpdk_ipsec_check_support;
|
||||
im->cb.add_del_sa_sess_cb = add_del_sa_sess;
|
||||
|
||||
if (vec_len (vlib_mains) == 0)
|
||||
vlib_node_set_state (&vlib_global_main, dpdk_crypto_input_node.index,
|
||||
for (i = 1; i < tm->n_vlib_mains; i++)
|
||||
vlib_node_set_state (vlib_mains[i], dpdk_crypto_input_node.index,
|
||||
VLIB_NODE_STATE_POLLING);
|
||||
else
|
||||
for (i = 1; i < tm->n_vlib_mains; i++)
|
||||
vlib_node_set_state (vlib_mains[i], dpdk_crypto_input_node.index,
|
||||
VLIB_NODE_STATE_POLLING);
|
||||
|
||||
/* TODO cryptodev counters */
|
||||
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@
|
||||
lib_LTLIBRARIES += libvlibmemory.la libvlibapi.la libvlibmemoryclient.la \
|
||||
libvlibsocket.la
|
||||
|
||||
libvlibmemory_la_DEPENDENCIES = libvppinfra.la libsvm.la libvlib.la
|
||||
libvlibmemory_la_DEPENDENCIES = libvppinfra.la libsvm.la
|
||||
libvlibmemory_la_LIBADD = $(libvlibmemory_la_DEPENDENCIES) -lpthread
|
||||
libvlibmemory_la_SOURCES = \
|
||||
vlibmemory/api.h \
|
||||
@@ -26,7 +26,7 @@ libvlibmemory_la_SOURCES = \
|
||||
vlibmemory/unix_shared_memory_queue.c \
|
||||
vlibmemory/unix_shared_memory_queue.h
|
||||
|
||||
libvlibapi_la_DEPENDENCIES = libvppinfra.la libvlib.la libvlibmemory.la
|
||||
libvlibapi_la_DEPENDENCIES = libvppinfra.la
|
||||
libvlibapi_la_LIBADD = $(libvlibapi_la_DEPENDENCIES)
|
||||
libvlibapi_la_SOURCES = \
|
||||
vlibapi/api.h \
|
||||
|
||||
+24
-3
@@ -261,7 +261,28 @@ done:
|
||||
return result;
|
||||
}
|
||||
|
||||
vlib_main_t **vlib_mains;
|
||||
/*
|
||||
* Hand-craft a static vector w/ length 1, so vec_len(vlib_mains) =1
|
||||
* and vlib_mains[0] = &vlib_global_main from the beginning of time.
|
||||
*
|
||||
* The only place which should ever expand vlib_mains is start_workers()
|
||||
* in threads.c. It knows about the bootstrap vector.
|
||||
*/
|
||||
/* *INDENT-OFF* */
|
||||
static struct
|
||||
{
|
||||
vec_header_t h;
|
||||
vlib_main_t *vm;
|
||||
} __attribute__ ((packed)) __bootstrap_vlib_main_vector
|
||||
__attribute__ ((aligned (CLIB_CACHE_LINE_BYTES))) =
|
||||
{
|
||||
.h.len = 1,
|
||||
.vm = &vlib_global_main,
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
vlib_main_t **vlib_mains = &__bootstrap_vlib_main_vector.vm;
|
||||
|
||||
|
||||
/* When dubugging validate that given buffers are either known allocated
|
||||
or known free. */
|
||||
@@ -280,7 +301,7 @@ vlib_buffer_validate_alloc_free (vlib_main_t * vm,
|
||||
ASSERT (os_get_cpu_number () == 0);
|
||||
|
||||
/* smp disaster check */
|
||||
if (vlib_mains)
|
||||
if (vec_len (vlib_mains) > 1)
|
||||
ASSERT (vm == vlib_mains[0]);
|
||||
|
||||
is_free = expected_state == VLIB_BUFFER_KNOWN_ALLOCATED;
|
||||
@@ -956,7 +977,7 @@ show_buffers (vlib_main_t * vm,
|
||||
|
||||
do
|
||||
{
|
||||
curr_vm = vec_len (vlib_mains) ? vlib_mains[vm_index] : vm;
|
||||
curr_vm = vlib_mains[vm_index];
|
||||
bm = curr_vm->buffer_main;
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
|
||||
@@ -23,7 +23,7 @@ always_inline vlib_main_t *
|
||||
vlib_get_main (void)
|
||||
{
|
||||
vlib_main_t *vm;
|
||||
vm = vlib_mains ? vlib_mains[os_get_cpu_number ()] : &vlib_global_main;
|
||||
vm = vlib_mains[os_get_cpu_number ()];
|
||||
ASSERT (vm);
|
||||
return vm;
|
||||
}
|
||||
|
||||
+9
-19
@@ -248,16 +248,11 @@ show_node_runtime (vlib_main_t * vm,
|
||||
if (unformat (input, "max") || unformat (input, "m"))
|
||||
max = 1;
|
||||
|
||||
if (vec_len (vlib_mains) == 0)
|
||||
vec_add1 (stat_vms, vm);
|
||||
else
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
{
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
{
|
||||
stat_vm = vlib_mains[i];
|
||||
if (stat_vm)
|
||||
vec_add1 (stat_vms, stat_vm);
|
||||
}
|
||||
stat_vm = vlib_mains[i];
|
||||
if (stat_vm)
|
||||
vec_add1 (stat_vms, stat_vm);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -331,7 +326,7 @@ show_node_runtime (vlib_main_t * vm,
|
||||
}
|
||||
}
|
||||
|
||||
if (vec_len (vlib_mains))
|
||||
if (vec_len (vlib_mains) > 1)
|
||||
{
|
||||
vlib_worker_thread_t *w = vlib_worker_threads + j;
|
||||
if (j > 0)
|
||||
@@ -404,16 +399,11 @@ clear_node_runtime (vlib_main_t * vm,
|
||||
vlib_main_t **stat_vms = 0, *stat_vm;
|
||||
vlib_node_runtime_t *r;
|
||||
|
||||
if (vec_len (vlib_mains) == 0)
|
||||
vec_add1 (stat_vms, vm);
|
||||
else
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
{
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
{
|
||||
stat_vm = vlib_mains[i];
|
||||
if (stat_vm)
|
||||
vec_add1 (stat_vms, stat_vm);
|
||||
}
|
||||
stat_vm = vlib_mains[i];
|
||||
if (stat_vm)
|
||||
vec_add1 (stat_vms, stat_vm);
|
||||
}
|
||||
|
||||
vlib_worker_thread_barrier_sync (vm);
|
||||
|
||||
@@ -201,7 +201,7 @@ vlib_get_frame_no_check (vlib_main_t * vm, uword frame_index)
|
||||
vlib_frame_t *f;
|
||||
u32 cpu_index = frame_index & VLIB_CPU_MASK;
|
||||
u32 offset = frame_index & VLIB_OFFSET_MASK;
|
||||
vm = vlib_mains ? vlib_mains[cpu_index] : vm;
|
||||
vm = vlib_mains[cpu_index];
|
||||
f = vm->heap_base + offset;
|
||||
return f;
|
||||
}
|
||||
@@ -213,7 +213,7 @@ vlib_frame_index_no_check (vlib_main_t * vm, vlib_frame_t * f)
|
||||
|
||||
ASSERT (((uword) f & VLIB_CPU_MASK) == 0);
|
||||
|
||||
vm = vlib_mains ? vlib_mains[f->cpu_index] : vm;
|
||||
vm = vlib_mains[f->cpu_index];
|
||||
|
||||
i = ((u8 *) f - (u8 *) vm->heap_base);
|
||||
return i | f->cpu_index;
|
||||
|
||||
+10
-6
@@ -570,9 +570,13 @@ start_workers (vlib_main_t * vm)
|
||||
|
||||
if (n_vlib_mains > 1)
|
||||
{
|
||||
vec_validate (vlib_mains, tm->n_vlib_mains - 1);
|
||||
/* Replace hand-crafted length-1 vector with a real vector */
|
||||
vlib_mains = 0;
|
||||
|
||||
vec_validate_aligned (vlib_mains, tm->n_vlib_mains - 1,
|
||||
CLIB_CACHE_LINE_BYTES);
|
||||
_vec_len (vlib_mains) = 0;
|
||||
vec_add1 (vlib_mains, vm);
|
||||
vec_add1_aligned (vlib_mains, vm, CLIB_CACHE_LINE_BYTES);
|
||||
|
||||
vlib_worker_threads->wait_at_barrier =
|
||||
clib_mem_alloc_aligned (sizeof (u32), CLIB_CACHE_LINE_BYTES);
|
||||
@@ -685,7 +689,7 @@ start_workers (vlib_main_t * vm)
|
||||
/* Packet trace buffers are guaranteed to be empty, nothing to do here */
|
||||
|
||||
clib_mem_set_heap (oldheap);
|
||||
vec_add1 (vlib_mains, vm_clone);
|
||||
vec_add1_aligned (vlib_mains, vm_clone, CLIB_CACHE_LINE_BYTES);
|
||||
|
||||
vm_clone->error_main.counters =
|
||||
vec_dup (vlib_mains[0]->error_main.counters);
|
||||
@@ -805,7 +809,7 @@ vlib_worker_thread_node_runtime_update (void)
|
||||
|
||||
ASSERT (os_get_cpu_number () == 0);
|
||||
|
||||
if (vec_len (vlib_mains) == 0)
|
||||
if (vec_len (vlib_mains) == 1)
|
||||
return;
|
||||
|
||||
vm = vlib_mains[0];
|
||||
@@ -1148,7 +1152,7 @@ vlib_worker_thread_barrier_sync (vlib_main_t * vm)
|
||||
f64 deadline;
|
||||
u32 count;
|
||||
|
||||
if (!vlib_mains)
|
||||
if (vec_len (vlib_mains) < 2)
|
||||
return;
|
||||
|
||||
count = vec_len (vlib_mains) - 1;
|
||||
@@ -1179,7 +1183,7 @@ vlib_worker_thread_barrier_release (vlib_main_t * vm)
|
||||
{
|
||||
f64 deadline;
|
||||
|
||||
if (!vlib_mains)
|
||||
if (vec_len (vlib_mains) < 2)
|
||||
return;
|
||||
|
||||
if (--vlib_worker_threads[0].recursion_level > 0)
|
||||
|
||||
+19
-24
@@ -222,30 +222,25 @@ vlib_worker_thread_barrier_check (void)
|
||||
}
|
||||
}
|
||||
|
||||
#define foreach_vlib_main(body) \
|
||||
do { \
|
||||
vlib_main_t ** __vlib_mains = 0, *this_vlib_main; \
|
||||
int ii; \
|
||||
\
|
||||
if (vec_len (vlib_mains) == 0) \
|
||||
vec_add1 (__vlib_mains, &vlib_global_main); \
|
||||
else \
|
||||
{ \
|
||||
for (ii = 0; ii < vec_len (vlib_mains); ii++) \
|
||||
{ \
|
||||
this_vlib_main = vlib_mains[ii]; \
|
||||
if (this_vlib_main) \
|
||||
vec_add1 (__vlib_mains, this_vlib_main); \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
for (ii = 0; ii < vec_len (__vlib_mains); ii++) \
|
||||
{ \
|
||||
this_vlib_main = __vlib_mains[ii]; \
|
||||
/* body uses this_vlib_main... */ \
|
||||
(body); \
|
||||
} \
|
||||
vec_free (__vlib_mains); \
|
||||
#define foreach_vlib_main(body) \
|
||||
do { \
|
||||
vlib_main_t ** __vlib_mains = 0, *this_vlib_main; \
|
||||
int ii; \
|
||||
\
|
||||
for (ii = 0; ii < vec_len (vlib_mains); ii++) \
|
||||
{ \
|
||||
this_vlib_main = vlib_mains[ii]; \
|
||||
if (this_vlib_main) \
|
||||
vec_add1 (__vlib_mains, this_vlib_main); \
|
||||
} \
|
||||
\
|
||||
for (ii = 0; ii < vec_len (__vlib_mains); ii++) \
|
||||
{ \
|
||||
this_vlib_main = __vlib_mains[ii]; \
|
||||
/* body uses this_vlib_main... */ \
|
||||
(body); \
|
||||
} \
|
||||
vec_free (__vlib_mains); \
|
||||
} while (0);
|
||||
|
||||
#define foreach_sched_policy \
|
||||
|
||||
+3
-1
@@ -252,11 +252,13 @@ void vl_msg_api_queue_handler (unix_shared_memory_queue_t * q);
|
||||
vl_api_trace_t *vl_msg_api_trace_get (api_main_t * am,
|
||||
vl_api_trace_which_t which);
|
||||
|
||||
void vl_msg_api_barrier_sync (void) __attribute__ ((weak));
|
||||
void vl_msg_api_barrier_release (void) __attribute__ ((weak));
|
||||
void vl_msg_api_free (void *);
|
||||
void vl_noop_handler (void *mp);
|
||||
clib_error_t *vl_api_init (vlib_main_t * vm);
|
||||
void vl_msg_api_increment_missing_client_counter (void);
|
||||
void vl_msg_api_post_mortem_dump (void);
|
||||
void vl_msg_api_post_mortem_dump_enable_disable (int enable);
|
||||
void vl_msg_api_register_pd_handler (void *handler,
|
||||
u16 msg_id_host_byte_order);
|
||||
int vl_msg_api_pd_handler (void *mp, int rv);
|
||||
|
||||
+21
-509
File diff suppressed because it is too large
Load Diff
@@ -73,16 +73,11 @@ vlib_node_serialize (vlib_node_main_t * nm, u8 * vector,
|
||||
|
||||
if (vec_len (stat_vms) == 0)
|
||||
{
|
||||
if (vec_len (vlib_mains) == 0)
|
||||
vec_add1 (stat_vms, vm);
|
||||
else
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
{
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
{
|
||||
stat_vm = vlib_mains[i];
|
||||
if (stat_vm)
|
||||
vec_add1 (stat_vms, stat_vm);
|
||||
}
|
||||
stat_vm = vlib_mains[i];
|
||||
if (stat_vm)
|
||||
vec_add1 (stat_vms, stat_vm);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,7 +281,7 @@ vlib_node_unserialize (u8 * vector)
|
||||
return nodes_by_thread;
|
||||
}
|
||||
|
||||
#if CLIB_DEBUG > 0
|
||||
#if TEST_CODE
|
||||
|
||||
static clib_error_t *
|
||||
test_node_serialize_command_fn (vlib_main_t * vm,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -374,8 +374,7 @@ vhost_user_rx_thread_placement ()
|
||||
for (i = vum->input_cpu_first_index;
|
||||
i < vum->input_cpu_first_index + vum->input_cpu_count; i++)
|
||||
{
|
||||
vlib_node_set_state (vlib_mains ? vlib_mains[i] : &vlib_global_main,
|
||||
vhost_user_input_node.index,
|
||||
vlib_node_set_state (vlib_mains[i], vhost_user_input_node.index,
|
||||
VLIB_NODE_STATE_DISABLED);
|
||||
vec_add1 (workers, i);
|
||||
}
|
||||
@@ -406,9 +405,9 @@ vhost_user_rx_thread_placement ()
|
||||
iaq.qid = qid;
|
||||
iaq.vhost_iface_index = vui - vum->vhost_user_interfaces;
|
||||
vec_add1 (vhc->rx_queues, iaq);
|
||||
vlib_node_set_state (vlib_mains ? vlib_mains[cpu_index] :
|
||||
&vlib_global_main, vhost_user_input_node.index,
|
||||
VLIB_NODE_STATE_POLLING);
|
||||
vlib_node_set_state (vlib_mains[cpu_index],
|
||||
vhost_user_input_node.index,
|
||||
VLIB_NODE_STATE_POLLING);
|
||||
}
|
||||
});
|
||||
/* *INDENT-ON* */
|
||||
|
||||
@@ -34,14 +34,12 @@ vpp_json_test_SOURCES = \
|
||||
vat/json_test.c
|
||||
|
||||
vpp_api_test_LDADD = \
|
||||
libvlib.la \
|
||||
libvlibmemoryclient.la \
|
||||
libsvm.la \
|
||||
libvatplugin.la \
|
||||
libvppinfra.la \
|
||||
libvlibapi.la \
|
||||
libvlibmemory.la \
|
||||
libvnet.la \
|
||||
-lpthread -lm -lrt -ldl -lcrypto
|
||||
|
||||
vpp_api_test_LDFLAGS = -Wl,--export-dynamic
|
||||
|
||||
@@ -2143,7 +2143,6 @@ vpe_api_init (vlib_main_t * vm)
|
||||
am->oam_events_registration_hash = hash_create (0, sizeof (uword));
|
||||
am->bfd_events_registration_hash = hash_create (0, sizeof (uword));
|
||||
|
||||
vl_api_init (vm);
|
||||
vl_set_memory_region_name ("/vpe-api");
|
||||
vl_enable_disable_memory_api (vm, 1 /* enable it */ );
|
||||
|
||||
|
||||
+2
-7
@@ -122,13 +122,8 @@ gmon_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
|
||||
/* Initial wait for the world to settle down */
|
||||
vlib_process_suspend (vm, 5.0);
|
||||
|
||||
if (vec_len (vlib_mains) == 0)
|
||||
vec_add1 (gm->my_vlib_mains, &vlib_global_main);
|
||||
else
|
||||
{
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
vec_add1 (gm->my_vlib_mains, vlib_mains[i]);
|
||||
}
|
||||
for (i = 0; i < vec_len (vlib_mains); i++)
|
||||
vec_add1 (gm->my_vlib_mains, vlib_mains[i]);
|
||||
|
||||
while (1)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user