Lines Matching refs:ht
113 static inline void *rht_obj(const struct rhashtable *ht, in rht_obj() argument
116 return (char *)he - ht->p.head_offset; in rht_obj()
125 static inline unsigned int rht_key_get_hash(struct rhashtable *ht, in rht_key_get_hash() argument
133 hash = ht->p.hashfn(key, ht->key_len, hash_rnd); in rht_key_get_hash()
144 unsigned int key_len = ht->p.key_len; in rht_key_get_hash()
156 struct rhashtable *ht, const struct bucket_table *tbl, in rht_key_hashfn() argument
159 unsigned int hash = rht_key_get_hash(ht, key, params, tbl->hash_rnd); in rht_key_hashfn()
165 struct rhashtable *ht, const struct bucket_table *tbl, in rht_head_hashfn() argument
168 const char *ptr = rht_obj(ht, he); in rht_head_hashfn()
172 ht->p.key_len, in rht_head_hashfn()
174 rht_key_hashfn(ht, tbl, ptr + params.key_offset, params); in rht_head_hashfn()
182 static inline bool rht_grow_above_75(const struct rhashtable *ht, in rht_grow_above_75() argument
186 return atomic_read(&ht->nelems) > (tbl->size / 4 * 3) && in rht_grow_above_75()
187 (!ht->p.max_size || tbl->size < ht->p.max_size); in rht_grow_above_75()
195 static inline bool rht_shrink_below_30(const struct rhashtable *ht, in rht_shrink_below_30() argument
199 return atomic_read(&ht->nelems) < (tbl->size * 3 / 10) && in rht_shrink_below_30()
200 tbl->size > ht->p.min_size; in rht_shrink_below_30()
208 static inline bool rht_grow_above_100(const struct rhashtable *ht, in rht_grow_above_100() argument
211 return atomic_read(&ht->nelems) > tbl->size && in rht_grow_above_100()
212 (!ht->p.max_size || tbl->size < ht->p.max_size); in rht_grow_above_100()
220 static inline bool rht_grow_above_max(const struct rhashtable *ht, in rht_grow_above_max() argument
223 return atomic_read(&ht->nelems) >= ht->max_elems; in rht_grow_above_max()
227 int lockdep_rht_mutex_is_held(struct rhashtable *ht);
230 static inline int lockdep_rht_mutex_is_held(struct rhashtable *ht) in lockdep_rht_mutex_is_held() argument
242 void *rhashtable_insert_slow(struct rhashtable *ht, const void *key,
245 void rhashtable_walk_enter(struct rhashtable *ht,
259 void rhashtable_free_and_destroy(struct rhashtable *ht,
262 void rhashtable_destroy(struct rhashtable *ht);
268 struct rhash_lock_head **rht_bucket_nested_insert(struct rhashtable *ht,
272 #define rht_dereference(p, ht) \ argument
273 rcu_dereference_protected(p, lockdep_rht_mutex_is_held(ht))
275 #define rht_dereference_rcu(p, ht) \ argument
276 rcu_dereference_check(p, lockdep_rht_mutex_is_held(ht))
302 struct rhashtable *ht, struct bucket_table *tbl, unsigned int hash) in rht_bucket_insert() argument
304 return unlikely(tbl->nest) ? rht_bucket_nested_insert(ht, tbl, hash) : in rht_bucket_insert()
581 struct rhashtable *ht = arg->ht; in rhashtable_compare() local
584 return memcmp(ptr + ht->p.key_offset, arg->key, ht->p.key_len); in rhashtable_compare()
589 struct rhashtable *ht, const void *key, in __rhashtable_lookup() argument
593 .ht = ht, in __rhashtable_lookup()
601 tbl = rht_dereference_rcu(ht->tbl, ht); in __rhashtable_lookup()
603 hash = rht_key_hashfn(ht, tbl, key, params); in __rhashtable_lookup()
608 params.obj_cmpfn(&arg, rht_obj(ht, he)) : in __rhashtable_lookup()
609 rhashtable_compare(&arg, rht_obj(ht, he))) in __rhashtable_lookup()
621 tbl = rht_dereference_rcu(tbl->future_tbl, ht); in __rhashtable_lookup()
642 struct rhashtable *ht, const void *key, in rhashtable_lookup() argument
645 struct rhash_head *he = __rhashtable_lookup(ht, key, params); in rhashtable_lookup()
647 return he ? rht_obj(ht, he) : NULL; in rhashtable_lookup()
665 struct rhashtable *ht, const void *key, in rhashtable_lookup_fast() argument
671 obj = rhashtable_lookup(ht, key, params); in rhashtable_lookup_fast()
695 struct rhash_head *he = __rhashtable_lookup(&hlt->ht, key, params); in rhltable_lookup()
705 struct rhashtable *ht, const void *key, struct rhash_head *obj, in __rhashtable_insert_fast() argument
709 .ht = ht, in __rhashtable_insert_fast()
722 tbl = rht_dereference_rcu(ht->tbl, ht); in __rhashtable_insert_fast()
723 hash = rht_head_hashfn(ht, tbl, obj, params); in __rhashtable_insert_fast()
725 bkt = rht_bucket_insert(ht, tbl, hash); in __rhashtable_insert_fast()
736 return rhashtable_insert_slow(ht, key, obj); in __rhashtable_insert_fast()
746 params.obj_cmpfn(&arg, rht_obj(ht, head)) : in __rhashtable_insert_fast()
747 rhashtable_compare(&arg, rht_obj(ht, head)))) { in __rhashtable_insert_fast()
752 data = rht_obj(ht, head); in __rhashtable_insert_fast()
777 if (unlikely(rht_grow_above_max(ht, tbl))) in __rhashtable_insert_fast()
780 if (unlikely(rht_grow_above_100(ht, tbl))) in __rhashtable_insert_fast()
794 atomic_inc(&ht->nelems); in __rhashtable_insert_fast()
797 if (rht_grow_above_75(ht, tbl)) in __rhashtable_insert_fast()
798 schedule_work(&ht->run_work); in __rhashtable_insert_fast()
827 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_insert_fast() argument
832 ret = __rhashtable_insert_fast(ht, NULL, obj, params, false); in rhashtable_insert_fast()
859 return PTR_ERR(__rhashtable_insert_fast(&hlt->ht, key, &list->rhead, in rhltable_insert_key()
882 const char *key = rht_obj(&hlt->ht, &list->rhead); in rhltable_insert()
904 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_lookup_insert_fast() argument
907 const char *key = rht_obj(ht, obj); in rhashtable_lookup_insert_fast()
910 BUG_ON(ht->p.obj_hashfn); in rhashtable_lookup_insert_fast()
912 ret = __rhashtable_insert_fast(ht, key + ht->p.key_offset, obj, params, in rhashtable_lookup_insert_fast()
931 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_lookup_get_insert_fast() argument
934 const char *key = rht_obj(ht, obj); in rhashtable_lookup_get_insert_fast()
936 BUG_ON(ht->p.obj_hashfn); in rhashtable_lookup_get_insert_fast()
938 return __rhashtable_insert_fast(ht, key + ht->p.key_offset, obj, params, in rhashtable_lookup_get_insert_fast()
958 struct rhashtable *ht, const void *key, struct rhash_head *obj, in rhashtable_lookup_insert_key() argument
963 BUG_ON(!ht->p.obj_hashfn || !key); in rhashtable_lookup_insert_key()
965 ret = __rhashtable_insert_fast(ht, key, obj, params, false); in rhashtable_lookup_insert_key()
984 struct rhashtable *ht, const void *key, struct rhash_head *obj, in rhashtable_lookup_get_insert_key() argument
987 BUG_ON(!ht->p.obj_hashfn || !key); in rhashtable_lookup_get_insert_key()
989 return __rhashtable_insert_fast(ht, key, obj, params, false); in rhashtable_lookup_get_insert_key()
994 struct rhashtable *ht, struct bucket_table *tbl, in __rhashtable_remove_fast_one() argument
1004 hash = rht_head_hashfn(ht, tbl, obj, params); in __rhashtable_remove_fast_one()
1063 atomic_dec(&ht->nelems); in __rhashtable_remove_fast_one()
1064 if (unlikely(ht->p.automatic_shrinking && in __rhashtable_remove_fast_one()
1065 rht_shrink_below_30(ht, tbl))) in __rhashtable_remove_fast_one()
1066 schedule_work(&ht->run_work); in __rhashtable_remove_fast_one()
1075 struct rhashtable *ht, struct rhash_head *obj, in __rhashtable_remove_fast() argument
1083 tbl = rht_dereference_rcu(ht->tbl, ht); in __rhashtable_remove_fast()
1090 while ((err = __rhashtable_remove_fast_one(ht, tbl, obj, params, in __rhashtable_remove_fast()
1092 (tbl = rht_dereference_rcu(tbl->future_tbl, ht))) in __rhashtable_remove_fast()
1116 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_remove_fast() argument
1119 return __rhashtable_remove_fast(ht, obj, params, false); in rhashtable_remove_fast()
1141 return __rhashtable_remove_fast(&hlt->ht, &list->rhead, params, true); in rhltable_remove()
1146 struct rhashtable *ht, struct bucket_table *tbl, in __rhashtable_replace_fast() argument
1159 hash = rht_head_hashfn(ht, tbl, obj_old, params); in __rhashtable_replace_fast()
1160 if (hash != rht_head_hashfn(ht, tbl, obj_new, params)) in __rhashtable_replace_fast()
1208 struct rhashtable *ht, struct rhash_head *obj_old, in rhashtable_replace_fast() argument
1217 tbl = rht_dereference_rcu(ht->tbl, ht); in rhashtable_replace_fast()
1224 while ((err = __rhashtable_replace_fast(ht, tbl, obj_old, in rhashtable_replace_fast()
1226 (tbl = rht_dereference_rcu(tbl->future_tbl, ht))) in rhashtable_replace_fast()
1258 return rhashtable_walk_enter(&hlt->ht, iter); in rhltable_walk_enter()
1274 return rhashtable_free_and_destroy(&hlt->ht, free_fn, arg); in rhltable_free_and_destroy()