summaryrefslogtreecommitdiffstats
path: root/src/vlib
diff options
context:
space:
mode:
Diffstat (limited to 'src/vlib')
-rw-r--r--src/vlib/main.c9
-rw-r--r--src/vlib/node.h5
-rw-r--r--src/vlib/node_funcs.h15
3 files changed, 8 insertions, 21 deletions
diff --git a/src/vlib/main.c b/src/vlib/main.c
index 73548fbea72..5d99e899273 100644
--- a/src/vlib/main.c
+++ b/src/vlib/main.c
@@ -138,19 +138,12 @@ vlib_frame_alloc_to_node (vlib_main_t * vm, u32 to_node_index,
else
{
f = clib_mem_alloc_aligned_no_fail (n, VLIB_FRAME_ALIGN);
- f->thread_index = vm->thread_index;
fi = vlib_frame_index_no_check (vm, f);
}
/* Poison frame when debugging. */
if (CLIB_DEBUG > 0)
- {
- u32 save_thread_index = f->thread_index;
-
- memset (f, 0xfe, n);
-
- f->thread_index = save_thread_index;
- }
+ memset (f, 0xfe, n);
/* Insert magic number. */
{
diff --git a/src/vlib/node.h b/src/vlib/node.h
index 77914272bbc..2acd61ce3f6 100644
--- a/src/vlib/node.h
+++ b/src/vlib/node.h
@@ -326,7 +326,7 @@ typedef struct vlib_node_t
/* Max number of vector elements to process at once per node. */
#define VLIB_FRAME_SIZE 256
-#define VLIB_FRAME_ALIGN VLIB_MAX_CPUS
+#define VLIB_FRAME_ALIGN CLIB_CACHE_LINE_BYTES
/* Calling frame (think stack frame) for a node. */
typedef struct vlib_frame_t
@@ -343,9 +343,6 @@ typedef struct vlib_frame_t
/* Number of vector elements currently in frame. */
u16 n_vectors;
- /* Owner thread / heap id */
- u16 thread_index;
-
/* Scalar and vector arguments to next node. */
u8 arguments[0];
} vlib_frame_t;
diff --git a/src/vlib/node_funcs.h b/src/vlib/node_funcs.h
index c4c06454228..0059b9bec9e 100644
--- a/src/vlib/node_funcs.h
+++ b/src/vlib/node_funcs.h
@@ -216,24 +216,21 @@ always_inline vlib_frame_t *
vlib_get_frame_no_check (vlib_main_t * vm, uword frame_index)
{
vlib_frame_t *f;
- u32 thread_index = frame_index & VLIB_CPU_MASK;
- u32 offset = frame_index & VLIB_OFFSET_MASK;
- vm = vlib_mains[thread_index];
- f = vm->heap_base + offset;
+ f = vm->heap_base + (frame_index * VLIB_FRAME_ALIGN);
return f;
}
always_inline u32
vlib_frame_index_no_check (vlib_main_t * vm, vlib_frame_t * f)
{
- u32 i;
+ uword i;
- ASSERT (((uword) f & VLIB_CPU_MASK) == 0);
-
- vm = vlib_mains[f->thread_index];
+ ASSERT (((uword) f & (VLIB_FRAME_ALIGN - 1)) == 0);
i = ((u8 *) f - (u8 *) vm->heap_base);
- return i | f->thread_index;
+ ASSERT ((i / VLIB_FRAME_ALIGN) <= 0xFFFFFFFFULL);
+
+ return i / VLIB_FRAME_ALIGN;
}
always_inline vlib_frame_t *