X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fbihash_doc.h;h=7c7e5179961235c42bdd3cb31b68c38081c22e7c;hb=6eb0f84e3;hp=e6ab9db6d306648753044089461fce3995523738;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vppinfra/bihash_doc.h b/src/vppinfra/bihash_doc.h index e6ab9db6d30..7c7e5179961 100644 --- a/src/vppinfra/bihash_doc.h +++ b/src/vppinfra/bihash_doc.h @@ -78,7 +78,10 @@ typedef struct u8 *name; /**< hash table name */ BVT (clib_bihash_value) ** freelists; /**< power of two freelist vector */ - void *mheap; /**< clib memory heap */ + uword alloc_arena; /**< memory allocation arena */ + uword alloc_arena_next; /**< first available mem chunk */ + uword alloc_arena_size; /**< size of the arena */ + uword alloc_arena_mapped; /**< size of mapped memory in the arena */ } clib_bihash_t; /** Get pointer to value page given its clib mheap offset */ @@ -109,7 +112,7 @@ void clib_bihash_free (clib_bihash * h); @param h - the bi-hash table to search @param add_v - the (key,value) pair to add - @param is_add - add=1, delete=0 + @param is_add - add=1 (BIHASH_ADD), delete=0 (BIHASH_DEL) @returns 0 on success, < 0 on error @note This function will replace an existing (key,value) pair if the new key matches an existing key @@ -117,16 +120,60 @@ void clib_bihash_free (clib_bihash * h); int clib_bihash_add_del (clib_bihash * h, clib_bihash_kv * add_v, int is_add); +/** Search a bi-hash table, use supplied hash code + + @param h - the bi-hash table to search + @param hash - the hash code + @param in_out_kv - (key,value) pair containing the search key + @returns 0 on success (with in_out_kv set), < 0 on error +*/ +int clib_bihash_search_inline_with_hash + (clib_bihash * h, u64 hash, clib_bihash_kv * in_out_kv); + /** Search a bi-hash table @param h - the bi-hash table to search - @param search_v - (key,value) pair containing the search key - @param return_v - (key,value) pair which matches search_v.key - @returns 0 on success (with return_v set), < 0 on error + @param in_out_kv - (key,value) pair containing the search key + @returns 0 on success (with in_out_kv set), < 0 on error +*/ +int clib_bihash_search_inline (clib_bihash * h, clib_bihash_kv * in_out_kv); + +/** Prefetch a bi-hash bucket given a hash code + + @param h - the bi-hash table to search + @param hash - the hash code + @note see also clib_bihash_hash to compute the code */ -int clib_bihash_search (clib_bihash * h, - clib_bihash_kv * search_v, clib_bihash_kv * return_v); +void clib_bihash_prefetch_bucket (clib_bihash * h, u64 hash); +/** Prefetch bi-hash (key,value) data given a hash code + + @param h - the bi-hash table to search + @param hash - the hash code + @note assumes that the bucket has been prefetched, see + clib_bihash_prefetch_bucket +*/ +void clib_bihash_prefetch_data (clib_bihash * h, u64 hash); + +/** Search a bi-hash table + + @param h - the bi-hash table to search + @param search_key - (key,value) pair containing the search key + @param valuep - (key,value) set to search result + @returns 0 on success (with valuep set), < 0 on error + @note used in situations where key modification is not desired +*/ +int clib_bihash_search_inline_2 + (clib_bihash * h, clib_bihash_kv * search_key, clib_bihash_kv * valuep); + +/* Calback function for walking a bihash table + * + * @param kv - KV pair visited + * @param ctx - Context passed to the walk + * @return BIHASH_WALK_CONTINUE to continue BIHASH_WALK_STOP to stop + */ +typedef int (*clib_bihash_foreach_key_value_pair_cb) (clib_bihash_kv * kv, + void *ctx); /** Visit active (key,value) pairs in a bi-hash table @@ -134,11 +181,10 @@ int clib_bihash_search (clib_bihash * h, @param callback - function to call with each active (key,value) pair @param arg - arbitrary second argument passed to the callback function First argument is the (key,value) pair to visit - @note Trying to supply a proper function prototype for the - callback function appears to be a fool's errand. */ void clib_bihash_foreach_key_value_pair (clib_bihash * h, - void *callback, void *arg); + clib_bihash_foreach_key_value_pair_cb + * callback, void *arg); /* * fd.io coding-style-patch-verification: ON