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:
Dave Barach
2017-03-08 19:08:56 -05:00
committed by Ole Trøan
parent b3b2de71ce
commit 80f54e2027
16 changed files with 575 additions and 598 deletions
+2 -6
View File
@@ -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
View File
@@ -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
View File
@@ -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* */
+1 -1
View File
@@ -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
View File
@@ -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);
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+5 -10
View File
@@ -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
+4 -5
View File
@@ -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* */
-2
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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)
{