Lines Matching refs:ht
87 struct rhashtable *ht; member
173 struct rhashtable *ht; member
180 static inline unsigned long rht_marker(const struct rhashtable *ht, u32 hash) in rht_marker() argument
182 return NULLS_MARKER(ht->p.nulls_base + hash); in rht_marker()
185 #define INIT_RHT_NULLS_HEAD(ptr, ht, hash) \ argument
186 ((ptr) = (typeof(ptr)) rht_marker(ht, hash))
198 static inline void *rht_obj(const struct rhashtable *ht, in rht_obj() argument
201 return (char *)he - ht->p.head_offset; in rht_obj()
211 struct rhashtable *ht, const struct bucket_table *tbl, in rht_key_hashfn() argument
218 hash = ht->p.hashfn(key, ht->key_len, tbl->hash_rnd); in rht_key_hashfn()
230 unsigned int key_len = ht->p.key_len; in rht_key_hashfn()
242 struct rhashtable *ht, const struct bucket_table *tbl, in rht_head_hashfn() argument
245 const char *ptr = rht_obj(ht, he); in rht_head_hashfn()
249 ht->p.key_len, in rht_head_hashfn()
251 rht_key_hashfn(ht, tbl, ptr + params.key_offset, params); in rht_head_hashfn()
259 static inline bool rht_grow_above_75(const struct rhashtable *ht, in rht_grow_above_75() argument
263 return atomic_read(&ht->nelems) > (tbl->size / 4 * 3) && in rht_grow_above_75()
264 (!ht->p.max_size || tbl->size < ht->p.max_size); in rht_grow_above_75()
272 static inline bool rht_shrink_below_30(const struct rhashtable *ht, in rht_shrink_below_30() argument
276 return atomic_read(&ht->nelems) < (tbl->size * 3 / 10) && in rht_shrink_below_30()
277 tbl->size > ht->p.min_size; in rht_shrink_below_30()
285 static inline bool rht_grow_above_100(const struct rhashtable *ht, in rht_grow_above_100() argument
288 return atomic_read(&ht->nelems) > tbl->size && in rht_grow_above_100()
289 (!ht->p.max_size || tbl->size < ht->p.max_size); in rht_grow_above_100()
297 static inline bool rht_grow_above_max(const struct rhashtable *ht, in rht_grow_above_max() argument
300 return ht->p.insecure_max_entries && in rht_grow_above_max()
301 atomic_read(&ht->nelems) >= ht->p.insecure_max_entries; in rht_grow_above_max()
324 int lockdep_rht_mutex_is_held(struct rhashtable *ht);
327 static inline int lockdep_rht_mutex_is_held(struct rhashtable *ht) in lockdep_rht_mutex_is_held() argument
339 int rhashtable_init(struct rhashtable *ht,
342 int rhashtable_insert_slow(struct rhashtable *ht, const void *key,
345 int rhashtable_insert_rehash(struct rhashtable *ht);
347 int rhashtable_walk_init(struct rhashtable *ht, struct rhashtable_iter *iter);
353 void rhashtable_free_and_destroy(struct rhashtable *ht,
356 void rhashtable_destroy(struct rhashtable *ht);
358 #define rht_dereference(p, ht) \ argument
359 rcu_dereference_protected(p, lockdep_rht_mutex_is_held(ht))
361 #define rht_dereference_rcu(p, ht) \ argument
362 rcu_dereference_check(p, lockdep_rht_mutex_is_held(ht))
509 struct rhashtable *ht = arg->ht; in rhashtable_compare() local
512 return memcmp(ptr + ht->p.key_offset, arg->key, ht->p.key_len); in rhashtable_compare()
527 struct rhashtable *ht, const void *key, in rhashtable_lookup_fast() argument
531 .ht = ht, in rhashtable_lookup_fast()
540 tbl = rht_dereference_rcu(ht->tbl, ht); in rhashtable_lookup_fast()
542 hash = rht_key_hashfn(ht, tbl, key, params); in rhashtable_lookup_fast()
545 params.obj_cmpfn(&arg, rht_obj(ht, he)) : in rhashtable_lookup_fast()
546 rhashtable_compare(&arg, rht_obj(ht, he))) in rhashtable_lookup_fast()
549 return rht_obj(ht, he); in rhashtable_lookup_fast()
555 tbl = rht_dereference_rcu(tbl->future_tbl, ht); in rhashtable_lookup_fast()
565 struct rhashtable *ht, const void *key, struct rhash_head *obj, in __rhashtable_insert_fast() argument
569 .ht = ht, in __rhashtable_insert_fast()
582 tbl = rht_dereference_rcu(ht->tbl, ht); in __rhashtable_insert_fast()
588 hash = rht_head_hashfn(ht, tbl, obj, params); in __rhashtable_insert_fast()
596 tbl = rht_dereference_rcu(tbl->future_tbl, ht); in __rhashtable_insert_fast()
599 new_tbl = rht_dereference_rcu(tbl->future_tbl, ht); in __rhashtable_insert_fast()
601 err = rhashtable_insert_slow(ht, key, obj, new_tbl); in __rhashtable_insert_fast()
608 if (unlikely(rht_grow_above_max(ht, tbl))) in __rhashtable_insert_fast()
611 if (unlikely(rht_grow_above_100(ht, tbl))) { in __rhashtable_insert_fast()
614 err = rhashtable_insert_rehash(ht); in __rhashtable_insert_fast()
623 elasticity = ht->elasticity; in __rhashtable_insert_fast()
627 params.obj_cmpfn(&arg, rht_obj(ht, head)) : in __rhashtable_insert_fast()
628 rhashtable_compare(&arg, rht_obj(ht, head))))) in __rhashtable_insert_fast()
642 atomic_inc(&ht->nelems); in __rhashtable_insert_fast()
643 if (rht_grow_above_75(ht, tbl)) in __rhashtable_insert_fast()
644 schedule_work(&ht->run_work); in __rhashtable_insert_fast()
670 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_insert_fast() argument
673 return __rhashtable_insert_fast(ht, NULL, obj, params); in rhashtable_insert_fast()
698 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_lookup_insert_fast() argument
701 const char *key = rht_obj(ht, obj); in rhashtable_lookup_insert_fast()
703 BUG_ON(ht->p.obj_hashfn); in rhashtable_lookup_insert_fast()
705 return __rhashtable_insert_fast(ht, key + ht->p.key_offset, obj, in rhashtable_lookup_insert_fast()
732 struct rhashtable *ht, const void *key, struct rhash_head *obj, in rhashtable_lookup_insert_key() argument
735 BUG_ON(!ht->p.obj_hashfn || !key); in rhashtable_lookup_insert_key()
737 return __rhashtable_insert_fast(ht, key, obj, params); in rhashtable_lookup_insert_key()
742 struct rhashtable *ht, struct bucket_table *tbl, in __rhashtable_remove_fast() argument
751 hash = rht_head_hashfn(ht, tbl, obj, params); in __rhashtable_remove_fast()
789 struct rhashtable *ht, struct rhash_head *obj, in rhashtable_remove_fast() argument
797 tbl = rht_dereference_rcu(ht->tbl, ht); in rhashtable_remove_fast()
804 while ((err = __rhashtable_remove_fast(ht, tbl, obj, params)) && in rhashtable_remove_fast()
805 (tbl = rht_dereference_rcu(tbl->future_tbl, ht))) in rhashtable_remove_fast()
811 atomic_dec(&ht->nelems); in rhashtable_remove_fast()
812 if (unlikely(ht->p.automatic_shrinking && in rhashtable_remove_fast()
813 rht_shrink_below_30(ht, tbl))) in rhashtable_remove_fast()
814 schedule_work(&ht->run_work); in rhashtable_remove_fast()