X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fmhash.c;h=f0f1aa470d70cbb8cafe1ddf585810a96b0195e0;hb=0d36720f8d28964be2df32d354583047b6194e14;hp=d4d5457ea7ae369e9175b50bcd901cf2e3e66aa0;hpb=178cf493d009995b28fdf220f04c98860ff79a9b;p=vpp.git diff --git a/src/vppinfra/mhash.c b/src/vppinfra/mhash.c index d4d5457ea7a..f0f1aa470d7 100644 --- a/src/vppinfra/mhash.c +++ b/src/vppinfra/mhash.c @@ -164,7 +164,7 @@ mhash_sanitize_hash_user (mhash_t * mh) h->user = pointer_to_uword (mh); } -void +__clib_export void mhash_init (mhash_t * h, uword n_value_bytes, uword n_key_bytes) { static struct @@ -205,13 +205,7 @@ mhash_init (mhash_t * h, uword n_value_bytes, uword n_key_bytes) clib_memset (h, 0, sizeof (h[0])); h->n_key_bytes = n_key_bytes; -#if 0 - if (h->n_key_bytes > 0) - { - vec_validate (h->key_tmp, h->n_key_bytes - 1); - _vec_len (h->key_tmp) = 0; - } -#endif + vec_validate (h->key_tmps, os_get_nthreads () - 1); ASSERT (n_key_bytes < ARRAY_LEN (t)); h->hash = hash_create2 ( /* elts */ 0, @@ -228,7 +222,6 @@ mhash_set_tmp_key (mhash_t * h, const void *key) u8 *key_tmp; int my_cpu = os_get_thread_index (); - vec_validate (h->key_tmps, my_cpu); key_tmp = h->key_tmps[my_cpu]; vec_reset_length (key_tmp); @@ -250,7 +243,7 @@ mhash_set_tmp_key (mhash_t * h, const void *key) return ~0; } -hash_pair_t * +__clib_export hash_pair_t * mhash_get_pair (mhash_t * h, const void *key) { uword ikey; @@ -267,7 +260,7 @@ typedef struct vec_header_t vec; } mhash_string_key_t; -uword +__clib_export uword mhash_set_mem (mhash_t * h, void *key, uword * new_value, uword * old_value) { u8 *k; @@ -302,7 +295,7 @@ mhash_set_mem (mhash_t * h, void *key, uword * new_value, uword * old_value) { i = h->key_vector_free_indices[l - 1]; k = vec_elt_at_index (h->key_vector_or_heap, i); - _vec_len (h->key_vector_free_indices) = l - 1; + vec_set_len (h->key_vector_free_indices, l - 1); } else { @@ -339,17 +332,17 @@ mhash_set_mem (mhash_t * h, void *key, uword * new_value, uword * old_value) if (key_alloc_from_free_list) { h->key_vector_free_indices[l] = i; - _vec_len (h->key_vector_free_indices) = l + 1; + vec_set_len (h->key_vector_free_indices, l + 1); } else - _vec_len (h->key_vector_or_heap) -= h->n_key_bytes; + vec_dec_len (h->key_vector_or_heap, h->n_key_bytes); } } return ikey; } -uword +__clib_export uword mhash_unset (mhash_t * h, void *key, uword * old_value) { hash_pair_t *p;