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);
269 struct rhashtable *ht, struct bucket_table *tbl, unsigned int hash);
271 #define rht_dereference(p, ht) \ argument
272 rcu_dereference_protected(p, lockdep_rht_mutex_is_held(ht))
274 #define rht_dereference_rcu(p, ht) \ argument
275 rcu_dereference_check(p, lockdep_rht_mutex_is_held(ht))
301 struct rhashtable *ht, struct bucket_table *tbl, unsigned int hash) in rht_bucket_insert() argument
303 return unlikely(tbl->nest) ? rht_bucket_nested_insert(ht, tbl, hash) : in rht_bucket_insert()
574 struct rhashtable *ht = arg->ht; in rhashtable_compare() local
577 return memcmp(ptr + ht->p.key_offset, arg->key, ht->p.key_len); in rhashtable_compare()
582 struct rhashtable *ht, const void *key, in __rhashtable_lookup() argument
586 .ht = ht, in __rhashtable_lookup()
594 tbl = rht_dereference_rcu(ht->tbl, ht); in __rhashtable_lookup()
596 hash = rht_key_hashfn(ht, tbl, key, params); in __rhashtable_lookup()
601 params.obj_cmpfn(&arg, rht_obj(ht, he)) : in __rhashtable_lookup()
602 rhashtable_compare(&arg, rht_obj(ht, he))) in __rhashtable_lookup()
614 tbl = rht_dereference_rcu(tbl->future_tbl, ht); in __rhashtable_lookup()
635 struct rhashtable *ht, const void *key, in rhashtable_lookup() argument
638 struct rhash_head *he = __rhashtable_lookup(ht, key, params); in rhashtable_lookup()
640 return he ? rht_obj(ht, he) : NULL; in rhashtable_lookup()
658 struct rhashtable *ht, const void *key, in rhashtable_lookup_fast() argument
664 obj = rhashtable_lookup(ht, key, params); in rhashtable_lookup_fast()
688 struct rhash_head *he = __rhashtable_lookup(&hlt->ht, key, params); in rhltable_lookup()
698 struct rhashtable *ht, const void *key, struct rhash_head *obj, in __rhashtable_insert_fast() argument
702 .ht = ht, in __rhashtable_insert_fast()
715 tbl = rht_dereference_rcu(ht->tbl, ht); in __rhashtable_insert_fast()
716 hash = rht_head_hashfn(ht, tbl, obj, params); in __rhashtable_insert_fast()
718 bkt = rht_bucket_insert(ht, tbl, hash); in __rhashtable_insert_fast()
729 return rhashtable_insert_slow(ht, key, obj); in __rhashtable_insert_fast()
739 params.obj_cmpfn(&arg, rht_obj(ht, head)) : in __rhashtable_insert_fast()
740 rhashtable_compare(&arg, rht_obj(ht, head)))) { in __rhashtable_insert_fast()
745 data = rht_obj(ht, head); in __rhashtable_insert_fast()
770 if (unlikely(rht_grow_above_max(ht, tbl))) in __rhashtable_insert_fast()
773 if (unlikely(rht_grow_above_100(ht, tbl))) in __rhashtable_insert_fast()
787 atomic_inc(&ht->nelems); in __rhashtable_insert_fast()
790 if (rht_grow_above_75(ht, tbl)) in __rhashtable_insert_fast()
791 schedule_work(&ht->run_work); in __rhashtable_insert_fast()
820 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_insert_fast() argument
825 ret = __rhashtable_insert_fast(ht, NULL, obj, params, false); in rhashtable_insert_fast()
852 return PTR_ERR(__rhashtable_insert_fast(&hlt->ht, key, &list->rhead, in rhltable_insert_key()
875 const char *key = rht_obj(&hlt->ht, &list->rhead); in rhltable_insert()
897 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_lookup_insert_fast() argument
900 const char *key = rht_obj(ht, obj); in rhashtable_lookup_insert_fast()
903 BUG_ON(ht->p.obj_hashfn); in rhashtable_lookup_insert_fast()
905 ret = __rhashtable_insert_fast(ht, key + ht->p.key_offset, obj, params, in rhashtable_lookup_insert_fast()
924 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_lookup_get_insert_fast() argument
927 const char *key = rht_obj(ht, obj); in rhashtable_lookup_get_insert_fast()
929 BUG_ON(ht->p.obj_hashfn); in rhashtable_lookup_get_insert_fast()
931 return __rhashtable_insert_fast(ht, key + ht->p.key_offset, obj, params, in rhashtable_lookup_get_insert_fast()
951 struct rhashtable *ht, const void *key, struct rhash_head *obj, in rhashtable_lookup_insert_key() argument
956 BUG_ON(!ht->p.obj_hashfn || !key); in rhashtable_lookup_insert_key()
958 ret = __rhashtable_insert_fast(ht, key, obj, params, false); in rhashtable_lookup_insert_key()
977 struct rhashtable *ht, const void *key, struct rhash_head *obj, in rhashtable_lookup_get_insert_key() argument
980 BUG_ON(!ht->p.obj_hashfn || !key); in rhashtable_lookup_get_insert_key()
982 return __rhashtable_insert_fast(ht, key, obj, params, false); in rhashtable_lookup_get_insert_key()
987 struct rhashtable *ht, struct bucket_table *tbl, in __rhashtable_remove_fast_one() argument
997 hash = rht_head_hashfn(ht, tbl, obj, params); in __rhashtable_remove_fast_one()
1056 atomic_dec(&ht->nelems); in __rhashtable_remove_fast_one()
1057 if (unlikely(ht->p.automatic_shrinking && in __rhashtable_remove_fast_one()
1058 rht_shrink_below_30(ht, tbl))) in __rhashtable_remove_fast_one()
1059 schedule_work(&ht->run_work); in __rhashtable_remove_fast_one()
1068 struct rhashtable *ht, struct rhash_head *obj, in __rhashtable_remove_fast() argument
1076 tbl = rht_dereference_rcu(ht->tbl, ht); in __rhashtable_remove_fast()
1083 while ((err = __rhashtable_remove_fast_one(ht, tbl, obj, params, in __rhashtable_remove_fast()
1085 (tbl = rht_dereference_rcu(tbl->future_tbl, ht))) in __rhashtable_remove_fast()
1109 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_remove_fast() argument
1112 return __rhashtable_remove_fast(ht, obj, params, false); in rhashtable_remove_fast()
1134 return __rhashtable_remove_fast(&hlt->ht, &list->rhead, params, true); in rhltable_remove()
1139 struct rhashtable *ht, struct bucket_table *tbl, in __rhashtable_replace_fast() argument
1152 hash = rht_head_hashfn(ht, tbl, obj_old, params); in __rhashtable_replace_fast()
1153 if (hash != rht_head_hashfn(ht, tbl, obj_new, params)) in __rhashtable_replace_fast()
1201 struct rhashtable *ht, struct rhash_head *obj_old, in rhashtable_replace_fast() argument
1210 tbl = rht_dereference_rcu(ht->tbl, ht); in rhashtable_replace_fast()
1217 while ((err = __rhashtable_replace_fast(ht, tbl, obj_old, in rhashtable_replace_fast()
1219 (tbl = rht_dereference_rcu(tbl->future_tbl, ht))) in rhashtable_replace_fast()
1251 return rhashtable_walk_enter(&hlt->ht, iter); in rhltable_walk_enter()
1267 return rhashtable_free_and_destroy(&hlt->ht, free_fn, arg); in rhltable_free_and_destroy()