diff options
-rw-r--r-- | vlib/vlib/main.c | 2 | ||||
-rw-r--r-- | vlib/vlib/node.h | 1 | ||||
-rw-r--r-- | vlib/vlib/threads.h | 13 |
3 files changed, 7 insertions, 9 deletions
diff --git a/vlib/vlib/main.c b/vlib/vlib/main.c index f541ed3d..2ea91a91 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 806a9dae..348ad1f3 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 07fc1d37..98f19c44 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) |