From 1441a6c54128584a86713af4f64f6d92ed4d79a4 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Mon, 14 Dec 2020 16:02:17 +0000 Subject: classify: Layout classify entry to group data-plane accessed fields on one cache line Type: refactor Signed-off-by: Neale Ranns Change-Id: I54128ba62f8dcc87c1845b33ed3637112d42a891 --- src/vnet/classify/vnet_classify.c | 51 +++++++++++++++------------------------ 1 file changed, 20 insertions(+), 31 deletions(-) (limited to 'src/vnet/classify/vnet_classify.c') diff --git a/src/vnet/classify/vnet_classify.c b/src/vnet/classify/vnet_classify.c index ca34eecc77f..72ab33e9210 100644 --- a/src/vnet/classify/vnet_classify.c +++ b/src/vnet/classify/vnet_classify.c @@ -128,17 +128,16 @@ vnet_classify_register_unformat_opaque_index_fn (unformat_function_t * fn) } vnet_classify_table_t * -vnet_classify_new_table (vnet_classify_main_t * cm, - u8 * mask, u32 nbuckets, u32 memory_size, - u32 skip_n_vectors, u32 match_n_vectors) +vnet_classify_new_table (vnet_classify_main_t *cm, const u8 *mask, + u32 nbuckets, u32 memory_size, u32 skip_n_vectors, + u32 match_n_vectors) { vnet_classify_table_t *t; void *oldheap; nbuckets = 1 << (max_log2 (nbuckets)); - pool_get_aligned (cm->tables, t, CLIB_CACHE_LINE_BYTES); - clib_memset (t, 0, sizeof (*t)); + pool_get_aligned_zero (cm->tables, t, CLIB_CACHE_LINE_BYTES); vec_validate_aligned (t->mask, match_n_vectors - 1, sizeof (u32x4)); clib_memcpy_fast (t->mask, mask, match_n_vectors * sizeof (u32x4)); @@ -393,6 +392,7 @@ vnet_classify_entry_claim_resource (vnet_classify_entry_t * e) fib_table_lock (e->metadata, FIB_PROTOCOL_IP6, FIB_SOURCE_CLASSIFY); break; case CLASSIFY_ACTION_SET_METADATA: + case CLASSIFY_ACTION_NONE: break; } } @@ -409,13 +409,14 @@ vnet_classify_entry_release_resource (vnet_classify_entry_t * e) fib_table_unlock (e->metadata, FIB_PROTOCOL_IP6, FIB_SOURCE_CLASSIFY); break; case CLASSIFY_ACTION_SET_METADATA: + case CLASSIFY_ACTION_NONE: break; } } -int -vnet_classify_add_del (vnet_classify_table_t * t, - vnet_classify_entry_t * add_v, int is_add) +static int +vnet_classify_add_del (vnet_classify_table_t *t, vnet_classify_entry_t *add_v, + int is_add) { u32 bucket_index; vnet_classify_bucket_t *b, tmp_b; @@ -743,17 +744,11 @@ format_classify_table (u8 * s, va_list * args) } int -vnet_classify_add_del_table (vnet_classify_main_t * cm, - u8 * mask, - u32 nbuckets, - u32 memory_size, - u32 skip, - u32 match, - u32 next_table_index, - u32 miss_next_index, - u32 * table_index, - u8 current_data_flag, - i16 current_data_offset, +vnet_classify_add_del_table (vnet_classify_main_t *cm, const u8 *mask, + u32 nbuckets, u32 memory_size, u32 skip, + u32 match, u32 next_table_index, + u32 miss_next_index, u32 *table_index, + u8 current_data_flag, i16 current_data_offset, int is_add, int del_chain) { vnet_classify_table_t *t; @@ -2197,11 +2192,8 @@ VLIB_CLI_COMMAND (show_classify_filter, static) = }; /* *INDENT-ON* */ - - - -static u8 * -format_vnet_classify_table (u8 * s, va_list * args) +u8 * +format_vnet_classify_table (u8 *s, va_list *args) { vnet_classify_main_t *cm = va_arg (*args, vnet_classify_main_t *); int verbose = va_arg (*args, int); @@ -2739,13 +2731,10 @@ unformat_classify_match (unformat_input_t * input, va_list * args) } int -vnet_classify_add_del_session (vnet_classify_main_t * cm, - u32 table_index, - u8 * match, - u32 hit_next_index, - u32 opaque_index, - i32 advance, - u8 action, u32 metadata, int is_add) +vnet_classify_add_del_session (vnet_classify_main_t *cm, u32 table_index, + const u8 *match, u32 hit_next_index, + u32 opaque_index, i32 advance, u8 action, + u16 metadata, int is_add) { vnet_classify_table_t *t; vnet_classify_entry_5_t _max_e __attribute__ ((aligned (16))); -- cgit 1.2.3-korg