summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vlib/vlib/main.c2
-rw-r--r--vlib/vlib/node.h1
-rw-r--r--vlib/vlib/threads.h13
3 files changed, 7 insertions, 9 deletions
diff --git a/vlib/vlib/main.c b/vlib/vlib/main.c
index f541ed3d57e..2ea91a91657 100644
--- a/vlib/vlib/main.c
+++ b/vlib/vlib/main.c
@@ -135,7 +135,7 @@ vlib_frame_alloc_to_node (vlib_main_t * vm, u32 to_node_index, u32 frame_flags)
}
else
{
- f = clib_mem_alloc_aligned_no_fail (n, CLIB_CACHE_LINE_BYTES);
+ f = clib_mem_alloc_aligned_no_fail (n, VLIB_FRAME_ALIGN);
f->cpu_index = vm->cpu_index;
fi = vlib_frame_index_no_check (vm, f);
}
diff --git a/vlib/vlib/node.h b/vlib/vlib/node.h
index 806a9dae1b5..348ad1f3b8c 100644
--- a/vlib/vlib/node.h
+++ b/vlib/vlib/node.h
@@ -290,6 +290,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
/* Calling frame (think stack frame) for a node. */
typedef struct vlib_frame_t {
diff --git a/vlib/vlib/threads.h b/vlib/vlib/threads.h
index 07fc1d3758a..98f19c442e3 100644
--- a/vlib/vlib/threads.h
+++ b/vlib/vlib/threads.h
@@ -43,15 +43,12 @@ typedef struct vlib_thread_registration_ {
uword * coremask;
} vlib_thread_registration_t;
-#define VLIB_MAX_CPUS 32
-
-/*
- * Objects passed around by "index" are cache-line aligned.
- * We can stick the owner CPU into the low 6 bits.
+/*
+ * Frames have their cpu / vlib_main_t index in the low-order N bits
+ * Make VLIB_MAX_CPUS a power-of-two, please...
*/
-#if VLIB_MAX_CPUS > 64
-#error VLIB_MAX_CPUS must be <= 64
-#endif
+
+#define VLIB_MAX_CPUS 256
#define VLIB_CPU_MASK (VLIB_MAX_CPUS - 1) /* 0x3f, max */
#define VLIB_OFFSET_MASK (~VLIB_CPU_MASK)