aboutsummaryrefslogtreecommitdiffstats
path: root/src/vlib
diff options
context:
space:
mode:
Diffstat (limited to 'src/vlib')
-rw-r--r--src/vlib/main.c8
-rw-r--r--src/vlib/node.c3
-rw-r--r--src/vlib/threads.c6
3 files changed, 14 insertions, 3 deletions
diff --git a/src/vlib/main.c b/src/vlib/main.c
index c5cb155b1ee..4dcf63e0f9c 100644
--- a/src/vlib/main.c
+++ b/src/vlib/main.c
@@ -91,10 +91,11 @@ vlib_frame_find_magic (vlib_frame_t * f, vlib_node_t * node)
return p;
}
-static vlib_frame_size_t *
+static inline vlib_frame_size_t *
get_frame_size_info (vlib_node_main_t * nm,
u32 n_scalar_bytes, u32 n_vector_bytes)
{
+#ifdef VLIB_SUPPORTS_ARBITRARY_SCALAR_SIZES
uword key = (n_scalar_bytes << 16) | n_vector_bytes;
uword *p, i;
@@ -109,6 +110,11 @@ get_frame_size_info (vlib_node_main_t * nm,
}
return vec_elt_at_index (nm->frame_sizes, i);
+#else
+ ASSERT (vlib_frame_bytes (n_scalar_bytes, n_vector_bytes)
+ == (vlib_frame_bytes (0, 4)));
+ return vec_elt_at_index (nm->frame_sizes, 0);
+#endif
}
static u32
diff --git a/src/vlib/node.c b/src/vlib/node.c
index 69f505143b2..af323c4d63c 100644
--- a/src/vlib/node.c
+++ b/src/vlib/node.c
@@ -635,7 +635,10 @@ vlib_node_main_init (vlib_main_t * vm)
vlib_node_t *n;
uword ni;
+ nm->frame_sizes = vec_new (vlib_frame_size_t, 1);
+#ifdef VLIB_SUPPORTS_ARBITRARY_SCALAR_SIZES
nm->frame_size_hash = hash_create (0, sizeof (uword));
+#endif
nm->flags |= VLIB_NODE_MAIN_RUNTIME_STARTED;
/* Generate sibling relationships */
diff --git a/src/vlib/threads.c b/src/vlib/threads.c
index e2f7d2634b9..7d17c7b37cc 100644
--- a/src/vlib/threads.c
+++ b/src/vlib/threads.c
@@ -866,9 +866,11 @@ start_workers (vlib_main_t * vm)
nm_clone->processes = vec_dup_aligned (nm->processes,
CLIB_CACHE_LINE_BYTES);
- /* zap the (per worker) frame freelists, etc */
- nm_clone->frame_sizes = 0;
+ /* Create per-thread frame freelist */
+ nm_clone->frame_sizes = vec_new (vlib_frame_size_t, 1);
+#ifdef VLIB_SUPPORTS_ARBITRARY_SCALAR_SIZES
nm_clone->frame_size_hash = hash_create (0, sizeof (uword));
+#endif
/* Packet trace buffers are guaranteed to be empty, nothing to do here */