1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Resizable, Scalable, Concurrent Hash Table 4 * 5 * Copyright (c) 2015-2016 Herbert Xu <[email protected]> 6 * Copyright (c) 2014-2015 Thomas Graf <[email protected]> 7 * Copyright (c) 2008-2014 Patrick McHardy <[email protected]> 8 * 9 * Code partially derived from nft_hash 10 * Rewritten with rehash code from br_multicast plus single list 11 * pointer as suggested by Josh Triplett 12 * 13 * This program is free software; you can redistribute it and/or modify 14 * it under the terms of the GNU General Public License version 2 as 15 * published by the Free Software Foundation. 16 */ 17 18 #ifndef _LINUX_RHASHTABLE_H 19 #define _LINUX_RHASHTABLE_H 20 21 #include <linux/err.h> 22 #include <linux/errno.h> 23 #include <linux/jhash.h> 24 #include <linux/list_nulls.h> 25 #include <linux/workqueue.h> 26 #include <linux/rculist.h> 27 #include <linux/bit_spinlock.h> 28 29 #include <linux/rhashtable-types.h> 30 /* 31 * Objects in an rhashtable have an embedded struct rhash_head 32 * which is linked into as hash chain from the hash table - or one 33 * of two or more hash tables when the rhashtable is being resized. 34 * The end of the chain is marked with a special nulls marks which has 35 * the least significant bit set but otherwise stores the address of 36 * the hash bucket. This allows us to be be sure we've found the end 37 * of the right list. 38 * The value stored in the hash bucket has BIT(2) used as a lock bit. 39 * This bit must be atomically set before any changes are made to 40 * the chain. To avoid dereferencing this pointer without clearing 41 * the bit first, we use an opaque 'struct rhash_lock_head *' for the 42 * pointer stored in the bucket. This struct needs to be defined so 43 * that rcu_dereference() works on it, but it has no content so a 44 * cast is needed for it to be useful. This ensures it isn't 45 * used by mistake with clearing the lock bit first. 46 */ 47 struct rhash_lock_head {}; 48 49 /* Maximum chain length before rehash 50 * 51 * The maximum (not average) chain length grows with the size of the hash 52 * table, at a rate of (log N)/(log log N). 53 * 54 * The value of 16 is selected so that even if the hash table grew to 55 * 2^32 you would not expect the maximum chain length to exceed it 56 * unless we are under attack (or extremely unlucky). 57 * 58 * As this limit is only to detect attacks, we don't need to set it to a 59 * lower value as you'd need the chain length to vastly exceed 16 to have 60 * any real effect on the system. 61 */ 62 #define RHT_ELASTICITY 16u 63 64 /** 65 * struct bucket_table - Table of hash buckets 66 * @size: Number of hash buckets 67 * @nest: Number of bits of first-level nested table. 68 * @rehash: Current bucket being rehashed 69 * @hash_rnd: Random seed to fold into hash 70 * @walkers: List of active walkers 71 * @rcu: RCU structure for freeing the table 72 * @future_tbl: Table under construction during rehashing 73 * @ntbl: Nested table used when out of memory. 74 * @buckets: size * hash buckets 75 */ 76 struct bucket_table { 77 unsigned int size; 78 unsigned int nest; 79 u32 hash_rnd; 80 struct list_head walkers; 81 struct rcu_head rcu; 82 83 struct bucket_table __rcu *future_tbl; 84 85 struct lockdep_map dep_map; 86 87 struct rhash_lock_head __rcu *buckets[] ____cacheline_aligned_in_smp; 88 }; 89 90 /* 91 * NULLS_MARKER() expects a hash value with the low 92 * bits mostly likely to be significant, and it discards 93 * the msb. 94 * We git it an address, in which the bottom 2 bits are 95 * always 0, and the msb might be significant. 96 * So we shift the address down one bit to align with 97 * expectations and avoid losing a significant bit. 98 */ 99 #define RHT_NULLS_MARKER(ptr) \ 100 ((void *)NULLS_MARKER(((unsigned long) (ptr)) >> 1)) 101 #define INIT_RHT_NULLS_HEAD(ptr) \ 102 ((ptr) = RHT_NULLS_MARKER(&(ptr))) 103 104 static inline bool rht_is_a_nulls(const struct rhash_head *ptr) 105 { 106 return ((unsigned long) ptr & 1); 107 } 108 109 static inline void *rht_obj(const struct rhashtable *ht, 110 const struct rhash_head *he) 111 { 112 return (char *)he - ht->p.head_offset; 113 } 114 115 static inline unsigned int rht_bucket_index(const struct bucket_table *tbl, 116 unsigned int hash) 117 { 118 return hash & (tbl->size - 1); 119 } 120 121 static inline unsigned int rht_key_get_hash(struct rhashtable *ht, 122 const void *key, const struct rhashtable_params params, 123 unsigned int hash_rnd) 124 { 125 unsigned int hash; 126 127 /* params must be equal to ht->p if it isn't constant. */ 128 if (!__builtin_constant_p(params.key_len)) 129 hash = ht->p.hashfn(key, ht->key_len, hash_rnd); 130 else if (params.key_len) { 131 unsigned int key_len = params.key_len; 132 133 if (params.hashfn) 134 hash = params.hashfn(key, key_len, hash_rnd); 135 else if (key_len & (sizeof(u32) - 1)) 136 hash = jhash(key, key_len, hash_rnd); 137 else 138 hash = jhash2(key, key_len / sizeof(u32), hash_rnd); 139 } else { 140 unsigned int key_len = ht->p.key_len; 141 142 if (params.hashfn) 143 hash = params.hashfn(key, key_len, hash_rnd); 144 else 145 hash = jhash(key, key_len, hash_rnd); 146 } 147 148 return hash; 149 } 150 151 static inline unsigned int rht_key_hashfn( 152 struct rhashtable *ht, const struct bucket_table *tbl, 153 const void *key, const struct rhashtable_params params) 154 { 155 unsigned int hash = rht_key_get_hash(ht, key, params, tbl->hash_rnd); 156 157 return rht_bucket_index(tbl, hash); 158 } 159 160 static inline unsigned int rht_head_hashfn( 161 struct rhashtable *ht, const struct bucket_table *tbl, 162 const struct rhash_head *he, const struct rhashtable_params params) 163 { 164 const char *ptr = rht_obj(ht, he); 165 166 return likely(params.obj_hashfn) ? 167 rht_bucket_index(tbl, params.obj_hashfn(ptr, params.key_len ?: 168 ht->p.key_len, 169 tbl->hash_rnd)) : 170 rht_key_hashfn(ht, tbl, ptr + params.key_offset, params); 171 } 172 173 /** 174 * rht_grow_above_75 - returns true if nelems > 0.75 * table-size 175 * @ht: hash table 176 * @tbl: current table 177 */ 178 static inline bool rht_grow_above_75(const struct rhashtable *ht, 179 const struct bucket_table *tbl) 180 { 181 /* Expand table when exceeding 75% load */ 182 return atomic_read(&ht->nelems) > (tbl->size / 4 * 3) && 183 (!ht->p.max_size || tbl->size < ht->p.max_size); 184 } 185 186 /** 187 * rht_shrink_below_30 - returns true if nelems < 0.3 * table-size 188 * @ht: hash table 189 * @tbl: current table 190 */ 191 static inline bool rht_shrink_below_30(const struct rhashtable *ht, 192 const struct bucket_table *tbl) 193 { 194 /* Shrink table beneath 30% load */ 195 return atomic_read(&ht->nelems) < (tbl->size * 3 / 10) && 196 tbl->size > ht->p.min_size; 197 } 198 199 /** 200 * rht_grow_above_100 - returns true if nelems > table-size 201 * @ht: hash table 202 * @tbl: current table 203 */ 204 static inline bool rht_grow_above_100(const struct rhashtable *ht, 205 const struct bucket_table *tbl) 206 { 207 return atomic_read(&ht->nelems) > tbl->size && 208 (!ht->p.max_size || tbl->size < ht->p.max_size); 209 } 210 211 /** 212 * rht_grow_above_max - returns true if table is above maximum 213 * @ht: hash table 214 * @tbl: current table 215 */ 216 static inline bool rht_grow_above_max(const struct rhashtable *ht, 217 const struct bucket_table *tbl) 218 { 219 return atomic_read(&ht->nelems) >= ht->max_elems; 220 } 221 222 #ifdef CONFIG_PROVE_LOCKING 223 int lockdep_rht_mutex_is_held(struct rhashtable *ht); 224 int lockdep_rht_bucket_is_held(const struct bucket_table *tbl, u32 hash); 225 #else 226 static inline int lockdep_rht_mutex_is_held(struct rhashtable *ht) 227 { 228 return 1; 229 } 230 231 static inline int lockdep_rht_bucket_is_held(const struct bucket_table *tbl, 232 u32 hash) 233 { 234 return 1; 235 } 236 #endif /* CONFIG_PROVE_LOCKING */ 237 238 void *rhashtable_insert_slow(struct rhashtable *ht, const void *key, 239 struct rhash_head *obj); 240 241 void rhashtable_walk_enter(struct rhashtable *ht, 242 struct rhashtable_iter *iter); 243 void rhashtable_walk_exit(struct rhashtable_iter *iter); 244 int rhashtable_walk_start_check(struct rhashtable_iter *iter) __acquires(RCU); 245 246 static inline void rhashtable_walk_start(struct rhashtable_iter *iter) 247 { 248 (void)rhashtable_walk_start_check(iter); 249 } 250 251 void *rhashtable_walk_next(struct rhashtable_iter *iter); 252 void *rhashtable_walk_peek(struct rhashtable_iter *iter); 253 void rhashtable_walk_stop(struct rhashtable_iter *iter) __releases(RCU); 254 255 void rhashtable_free_and_destroy(struct rhashtable *ht, 256 void (*free_fn)(void *ptr, void *arg), 257 void *arg); 258 void rhashtable_destroy(struct rhashtable *ht); 259 260 struct rhash_lock_head __rcu **rht_bucket_nested(const struct bucket_table *tbl, 261 unsigned int hash); 262 struct rhash_lock_head __rcu **__rht_bucket_nested(const struct bucket_table *tbl, 263 unsigned int hash); 264 struct rhash_lock_head __rcu **rht_bucket_nested_insert(struct rhashtable *ht, 265 struct bucket_table *tbl, 266 unsigned int hash); 267 268 #define rht_dereference(p, ht) \ 269 rcu_dereference_protected(p, lockdep_rht_mutex_is_held(ht)) 270 271 #define rht_dereference_rcu(p, ht) \ 272 rcu_dereference_check(p, lockdep_rht_mutex_is_held(ht)) 273 274 #define rht_dereference_bucket(p, tbl, hash) \ 275 rcu_dereference_protected(p, lockdep_rht_bucket_is_held(tbl, hash)) 276 277 #define rht_dereference_bucket_rcu(p, tbl, hash) \ 278 rcu_dereference_check(p, lockdep_rht_bucket_is_held(tbl, hash)) 279 280 #define rht_entry(tpos, pos, member) \ 281 ({ tpos = container_of(pos, typeof(*tpos), member); 1; }) 282 283 static inline struct rhash_lock_head __rcu *const *rht_bucket( 284 const struct bucket_table *tbl, unsigned int hash) 285 { 286 return unlikely(tbl->nest) ? rht_bucket_nested(tbl, hash) : 287 &tbl->buckets[hash]; 288 } 289 290 static inline struct rhash_lock_head __rcu **rht_bucket_var( 291 struct bucket_table *tbl, unsigned int hash) 292 { 293 return unlikely(tbl->nest) ? __rht_bucket_nested(tbl, hash) : 294 &tbl->buckets[hash]; 295 } 296 297 static inline struct rhash_lock_head __rcu **rht_bucket_insert( 298 struct rhashtable *ht, struct bucket_table *tbl, unsigned int hash) 299 { 300 return unlikely(tbl->nest) ? rht_bucket_nested_insert(ht, tbl, hash) : 301 &tbl->buckets[hash]; 302 } 303 304 /* 305 * We lock a bucket by setting BIT(1) in the pointer - this is always 306 * zero in real pointers and in the nulls marker. 307 * bit_spin_locks do not handle contention well, but the whole point 308 * of the hashtable design is to achieve minimum per-bucket contention. 309 * A nested hash table might not have a bucket pointer. In that case 310 * we cannot get a lock. For remove and replace the bucket cannot be 311 * interesting and doesn't need locking. 312 * For insert we allocate the bucket if this is the last bucket_table, 313 * and then take the lock. 314 * Sometimes we unlock a bucket by writing a new pointer there. In that 315 * case we don't need to unlock, but we do need to reset state such as 316 * local_bh. For that we have rht_assign_unlock(). As rcu_assign_pointer() 317 * provides the same release semantics that bit_spin_unlock() provides, 318 * this is safe. 319 */ 320 321 static inline void rht_lock(struct bucket_table *tbl, 322 struct rhash_lock_head **bkt) 323 { 324 local_bh_disable(); 325 bit_spin_lock(1, (unsigned long *)bkt); 326 lock_map_acquire(&tbl->dep_map); 327 } 328 329 static inline void rht_lock_nested(struct bucket_table *tbl, 330 struct rhash_lock_head **bucket, 331 unsigned int subclass) 332 { 333 local_bh_disable(); 334 bit_spin_lock(1, (unsigned long *)bucket); 335 lock_acquire_exclusive(&tbl->dep_map, subclass, 0, NULL, _THIS_IP_); 336 } 337 338 static inline void rht_unlock(struct bucket_table *tbl, 339 struct rhash_lock_head **bkt) 340 { 341 lock_map_release(&tbl->dep_map); 342 bit_spin_unlock(1, (unsigned long *)bkt); 343 local_bh_enable(); 344 } 345 346 /* 347 * Where 'bkt' is a bucket and might be locked: 348 * rht_ptr() dereferences that pointer and clears the lock bit. 349 * rht_ptr_exclusive() dereferences in a context where exclusive 350 * access is guaranteed, such as when destroying the table. 351 */ 352 static inline struct rhash_head *rht_ptr( 353 struct rhash_lock_head __rcu * const *bkt, 354 struct bucket_table *tbl, 355 unsigned int hash) 356 { 357 const struct rhash_lock_head *p = 358 rht_dereference_bucket_rcu(*bkt, tbl, hash); 359 360 return (void *)(((unsigned long)p) & ~BIT(1)); 361 } 362 363 static inline struct rhash_head *rht_ptr_exclusive( 364 struct rhash_lock_head __rcu * const *bkt) 365 { 366 const struct rhash_lock_head *p = 367 rcu_dereference_protected(*bkt, 1); 368 369 return (void *)(((unsigned long)p) & ~BIT(1)); 370 } 371 372 static inline struct rhash_lock_head __rcu *rht_ptr_locked(const 373 struct rhash_head *p) 374 { 375 return (void *)(((unsigned long)p) | BIT(1)); 376 } 377 378 static inline void rht_assign_unlock(struct bucket_table *tbl, 379 struct rhash_lock_head __rcu **bkt, 380 struct rhash_head *obj) 381 { 382 struct rhash_head __rcu **p = (struct rhash_head __rcu **)bkt; 383 384 lock_map_release(&tbl->dep_map); 385 rcu_assign_pointer(*p, obj); 386 preempt_enable(); 387 __release(bitlock); 388 local_bh_enable(); 389 } 390 391 /** 392 * rht_for_each_from - iterate over hash chain from given head 393 * @pos: the &struct rhash_head to use as a loop cursor. 394 * @head: the &struct rhash_head to start from 395 * @tbl: the &struct bucket_table 396 * @hash: the hash value / bucket index 397 */ 398 #define rht_for_each_from(pos, head, tbl, hash) \ 399 for (pos = head; \ 400 !rht_is_a_nulls(pos); \ 401 pos = rht_dereference_bucket((pos)->next, tbl, hash)) 402 403 /** 404 * rht_for_each - iterate over hash chain 405 * @pos: the &struct rhash_head to use as a loop cursor. 406 * @tbl: the &struct bucket_table 407 * @hash: the hash value / bucket index 408 */ 409 #define rht_for_each(pos, tbl, hash) \ 410 rht_for_each_from(pos, rht_ptr(rht_bucket(tbl, hash), tbl, hash), \ 411 tbl, hash) 412 413 /** 414 * rht_for_each_entry_from - iterate over hash chain from given head 415 * @tpos: the type * to use as a loop cursor. 416 * @pos: the &struct rhash_head to use as a loop cursor. 417 * @head: the &struct rhash_head to start from 418 * @tbl: the &struct bucket_table 419 * @hash: the hash value / bucket index 420 * @member: name of the &struct rhash_head within the hashable struct. 421 */ 422 #define rht_for_each_entry_from(tpos, pos, head, tbl, hash, member) \ 423 for (pos = head; \ 424 (!rht_is_a_nulls(pos)) && rht_entry(tpos, pos, member); \ 425 pos = rht_dereference_bucket((pos)->next, tbl, hash)) 426 427 /** 428 * rht_for_each_entry - iterate over hash chain of given type 429 * @tpos: the type * to use as a loop cursor. 430 * @pos: the &struct rhash_head to use as a loop cursor. 431 * @tbl: the &struct bucket_table 432 * @hash: the hash value / bucket index 433 * @member: name of the &struct rhash_head within the hashable struct. 434 */ 435 #define rht_for_each_entry(tpos, pos, tbl, hash, member) \ 436 rht_for_each_entry_from(tpos, pos, \ 437 rht_ptr(rht_bucket(tbl, hash), tbl, hash), \ 438 tbl, hash, member) 439 440 /** 441 * rht_for_each_entry_safe - safely iterate over hash chain of given type 442 * @tpos: the type * to use as a loop cursor. 443 * @pos: the &struct rhash_head to use as a loop cursor. 444 * @next: the &struct rhash_head to use as next in loop cursor. 445 * @tbl: the &struct bucket_table 446 * @hash: the hash value / bucket index 447 * @member: name of the &struct rhash_head within the hashable struct. 448 * 449 * This hash chain list-traversal primitive allows for the looped code to 450 * remove the loop cursor from the list. 451 */ 452 #define rht_for_each_entry_safe(tpos, pos, next, tbl, hash, member) \ 453 for (pos = rht_ptr(rht_bucket(tbl, hash), tbl, hash), \ 454 next = !rht_is_a_nulls(pos) ? \ 455 rht_dereference_bucket(pos->next, tbl, hash) : NULL; \ 456 (!rht_is_a_nulls(pos)) && rht_entry(tpos, pos, member); \ 457 pos = next, \ 458 next = !rht_is_a_nulls(pos) ? \ 459 rht_dereference_bucket(pos->next, tbl, hash) : NULL) 460 461 /** 462 * rht_for_each_rcu_from - iterate over rcu hash chain from given head 463 * @pos: the &struct rhash_head to use as a loop cursor. 464 * @head: the &struct rhash_head to start from 465 * @tbl: the &struct bucket_table 466 * @hash: the hash value / bucket index 467 * 468 * This hash chain list-traversal primitive may safely run concurrently with 469 * the _rcu mutation primitives such as rhashtable_insert() as long as the 470 * traversal is guarded by rcu_read_lock(). 471 */ 472 #define rht_for_each_rcu_from(pos, head, tbl, hash) \ 473 for (({barrier(); }), \ 474 pos = head; \ 475 !rht_is_a_nulls(pos); \ 476 pos = rcu_dereference_raw(pos->next)) 477 478 /** 479 * rht_for_each_rcu - iterate over rcu hash chain 480 * @pos: the &struct rhash_head to use as a loop cursor. 481 * @tbl: the &struct bucket_table 482 * @hash: the hash value / bucket index 483 * 484 * This hash chain list-traversal primitive may safely run concurrently with 485 * the _rcu mutation primitives such as rhashtable_insert() as long as the 486 * traversal is guarded by rcu_read_lock(). 487 */ 488 #define rht_for_each_rcu(pos, tbl, hash) \ 489 for (({barrier(); }), \ 490 pos = rht_ptr(rht_bucket(tbl, hash), tbl, hash); \ 491 !rht_is_a_nulls(pos); \ 492 pos = rcu_dereference_raw(pos->next)) 493 494 /** 495 * rht_for_each_entry_rcu_from - iterated over rcu hash chain from given head 496 * @tpos: the type * to use as a loop cursor. 497 * @pos: the &struct rhash_head to use as a loop cursor. 498 * @head: the &struct rhash_head to start from 499 * @tbl: the &struct bucket_table 500 * @hash: the hash value / bucket index 501 * @member: name of the &struct rhash_head within the hashable struct. 502 * 503 * This hash chain list-traversal primitive may safely run concurrently with 504 * the _rcu mutation primitives such as rhashtable_insert() as long as the 505 * traversal is guarded by rcu_read_lock(). 506 */ 507 #define rht_for_each_entry_rcu_from(tpos, pos, head, tbl, hash, member) \ 508 for (({barrier(); }), \ 509 pos = head; \ 510 (!rht_is_a_nulls(pos)) && rht_entry(tpos, pos, member); \ 511 pos = rht_dereference_bucket_rcu(pos->next, tbl, hash)) 512 513 /** 514 * rht_for_each_entry_rcu - iterate over rcu hash chain of given type 515 * @tpos: the type * to use as a loop cursor. 516 * @pos: the &struct rhash_head to use as a loop cursor. 517 * @tbl: the &struct bucket_table 518 * @hash: the hash value / bucket index 519 * @member: name of the &struct rhash_head within the hashable struct. 520 * 521 * This hash chain list-traversal primitive may safely run concurrently with 522 * the _rcu mutation primitives such as rhashtable_insert() as long as the 523 * traversal is guarded by rcu_read_lock(). 524 */ 525 #define rht_for_each_entry_rcu(tpos, pos, tbl, hash, member) \ 526 rht_for_each_entry_rcu_from(tpos, pos, \ 527 rht_ptr(rht_bucket(tbl, hash), \ 528 tbl, hash), \ 529 tbl, hash, member) 530 531 /** 532 * rhl_for_each_rcu - iterate over rcu hash table list 533 * @pos: the &struct rlist_head to use as a loop cursor. 534 * @list: the head of the list 535 * 536 * This hash chain list-traversal primitive should be used on the 537 * list returned by rhltable_lookup. 538 */ 539 #define rhl_for_each_rcu(pos, list) \ 540 for (pos = list; pos; pos = rcu_dereference_raw(pos->next)) 541 542 /** 543 * rhl_for_each_entry_rcu - iterate over rcu hash table list of given type 544 * @tpos: the type * to use as a loop cursor. 545 * @pos: the &struct rlist_head to use as a loop cursor. 546 * @list: the head of the list 547 * @member: name of the &struct rlist_head within the hashable struct. 548 * 549 * This hash chain list-traversal primitive should be used on the 550 * list returned by rhltable_lookup. 551 */ 552 #define rhl_for_each_entry_rcu(tpos, pos, list, member) \ 553 for (pos = list; pos && rht_entry(tpos, pos, member); \ 554 pos = rcu_dereference_raw(pos->next)) 555 556 static inline int rhashtable_compare(struct rhashtable_compare_arg *arg, 557 const void *obj) 558 { 559 struct rhashtable *ht = arg->ht; 560 const char *ptr = obj; 561 562 return memcmp(ptr + ht->p.key_offset, arg->key, ht->p.key_len); 563 } 564 565 /* Internal function, do not use. */ 566 static inline struct rhash_head *__rhashtable_lookup( 567 struct rhashtable *ht, const void *key, 568 const struct rhashtable_params params) 569 { 570 struct rhashtable_compare_arg arg = { 571 .ht = ht, 572 .key = key, 573 }; 574 struct rhash_lock_head __rcu * const *bkt; 575 struct bucket_table *tbl; 576 struct rhash_head *he; 577 unsigned int hash; 578 579 tbl = rht_dereference_rcu(ht->tbl, ht); 580 restart: 581 hash = rht_key_hashfn(ht, tbl, key, params); 582 bkt = rht_bucket(tbl, hash); 583 do { 584 rht_for_each_rcu_from(he, rht_ptr(bkt, tbl, hash), tbl, hash) { 585 if (params.obj_cmpfn ? 586 params.obj_cmpfn(&arg, rht_obj(ht, he)) : 587 rhashtable_compare(&arg, rht_obj(ht, he))) 588 continue; 589 return he; 590 } 591 /* An object might have been moved to a different hash chain, 592 * while we walk along it - better check and retry. 593 */ 594 } while (he != RHT_NULLS_MARKER(bkt)); 595 596 /* Ensure we see any new tables. */ 597 smp_rmb(); 598 599 tbl = rht_dereference_rcu(tbl->future_tbl, ht); 600 if (unlikely(tbl)) 601 goto restart; 602 603 return NULL; 604 } 605 606 /** 607 * rhashtable_lookup - search hash table 608 * @ht: hash table 609 * @key: the pointer to the key 610 * @params: hash table parameters 611 * 612 * Computes the hash value for the key and traverses the bucket chain looking 613 * for a entry with an identical key. The first matching entry is returned. 614 * 615 * This must only be called under the RCU read lock. 616 * 617 * Returns the first entry on which the compare function returned true. 618 */ 619 static inline void *rhashtable_lookup( 620 struct rhashtable *ht, const void *key, 621 const struct rhashtable_params params) 622 { 623 struct rhash_head *he = __rhashtable_lookup(ht, key, params); 624 625 return he ? rht_obj(ht, he) : NULL; 626 } 627 628 /** 629 * rhashtable_lookup_fast - search hash table, without RCU read lock 630 * @ht: hash table 631 * @key: the pointer to the key 632 * @params: hash table parameters 633 * 634 * Computes the hash value for the key and traverses the bucket chain looking 635 * for a entry with an identical key. The first matching entry is returned. 636 * 637 * Only use this function when you have other mechanisms guaranteeing 638 * that the object won't go away after the RCU read lock is released. 639 * 640 * Returns the first entry on which the compare function returned true. 641 */ 642 static inline void *rhashtable_lookup_fast( 643 struct rhashtable *ht, const void *key, 644 const struct rhashtable_params params) 645 { 646 void *obj; 647 648 rcu_read_lock(); 649 obj = rhashtable_lookup(ht, key, params); 650 rcu_read_unlock(); 651 652 return obj; 653 } 654 655 /** 656 * rhltable_lookup - search hash list table 657 * @hlt: hash table 658 * @key: the pointer to the key 659 * @params: hash table parameters 660 * 661 * Computes the hash value for the key and traverses the bucket chain looking 662 * for a entry with an identical key. All matching entries are returned 663 * in a list. 664 * 665 * This must only be called under the RCU read lock. 666 * 667 * Returns the list of entries that match the given key. 668 */ 669 static inline struct rhlist_head *rhltable_lookup( 670 struct rhltable *hlt, const void *key, 671 const struct rhashtable_params params) 672 { 673 struct rhash_head *he = __rhashtable_lookup(&hlt->ht, key, params); 674 675 return he ? container_of(he, struct rhlist_head, rhead) : NULL; 676 } 677 678 /* Internal function, please use rhashtable_insert_fast() instead. This 679 * function returns the existing element already in hashes in there is a clash, 680 * otherwise it returns an error via ERR_PTR(). 681 */ 682 static inline void *__rhashtable_insert_fast( 683 struct rhashtable *ht, const void *key, struct rhash_head *obj, 684 const struct rhashtable_params params, bool rhlist) 685 { 686 struct rhashtable_compare_arg arg = { 687 .ht = ht, 688 .key = key, 689 }; 690 struct rhash_lock_head __rcu **bkt; 691 struct rhash_head __rcu **pprev; 692 struct bucket_table *tbl; 693 struct rhash_head *head; 694 unsigned int hash; 695 int elasticity; 696 void *data; 697 698 rcu_read_lock(); 699 700 tbl = rht_dereference_rcu(ht->tbl, ht); 701 hash = rht_head_hashfn(ht, tbl, obj, params); 702 elasticity = RHT_ELASTICITY; 703 bkt = rht_bucket_insert(ht, tbl, hash); 704 data = ERR_PTR(-ENOMEM); 705 if (!bkt) 706 goto out; 707 pprev = NULL; 708 rht_lock(tbl, bkt); 709 710 if (unlikely(rcu_access_pointer(tbl->future_tbl))) { 711 slow_path: 712 rht_unlock(tbl, bkt); 713 rcu_read_unlock(); 714 return rhashtable_insert_slow(ht, key, obj); 715 } 716 717 rht_for_each_from(head, rht_ptr(bkt, tbl, hash), tbl, hash) { 718 struct rhlist_head *plist; 719 struct rhlist_head *list; 720 721 elasticity--; 722 if (!key || 723 (params.obj_cmpfn ? 724 params.obj_cmpfn(&arg, rht_obj(ht, head)) : 725 rhashtable_compare(&arg, rht_obj(ht, head)))) { 726 pprev = &head->next; 727 continue; 728 } 729 730 data = rht_obj(ht, head); 731 732 if (!rhlist) 733 goto out_unlock; 734 735 736 list = container_of(obj, struct rhlist_head, rhead); 737 plist = container_of(head, struct rhlist_head, rhead); 738 739 RCU_INIT_POINTER(list->next, plist); 740 head = rht_dereference_bucket(head->next, tbl, hash); 741 RCU_INIT_POINTER(list->rhead.next, head); 742 if (pprev) { 743 rcu_assign_pointer(*pprev, obj); 744 rht_unlock(tbl, bkt); 745 } else 746 rht_assign_unlock(tbl, bkt, obj); 747 data = NULL; 748 goto out; 749 } 750 751 if (elasticity <= 0) 752 goto slow_path; 753 754 data = ERR_PTR(-E2BIG); 755 if (unlikely(rht_grow_above_max(ht, tbl))) 756 goto out_unlock; 757 758 if (unlikely(rht_grow_above_100(ht, tbl))) 759 goto slow_path; 760 761 /* Inserting at head of list makes unlocking free. */ 762 head = rht_ptr(bkt, tbl, hash); 763 764 RCU_INIT_POINTER(obj->next, head); 765 if (rhlist) { 766 struct rhlist_head *list; 767 768 list = container_of(obj, struct rhlist_head, rhead); 769 RCU_INIT_POINTER(list->next, NULL); 770 } 771 772 atomic_inc(&ht->nelems); 773 rht_assign_unlock(tbl, bkt, obj); 774 775 if (rht_grow_above_75(ht, tbl)) 776 schedule_work(&ht->run_work); 777 778 data = NULL; 779 out: 780 rcu_read_unlock(); 781 782 return data; 783 784 out_unlock: 785 rht_unlock(tbl, bkt); 786 goto out; 787 } 788 789 /** 790 * rhashtable_insert_fast - insert object into hash table 791 * @ht: hash table 792 * @obj: pointer to hash head inside object 793 * @params: hash table parameters 794 * 795 * Will take the per bucket bitlock to protect against mutual mutations 796 * on the same bucket. Multiple insertions may occur in parallel unless 797 * they map to the same bucket. 798 * 799 * It is safe to call this function from atomic context. 800 * 801 * Will trigger an automatic deferred table resizing if residency in the 802 * table grows beyond 70%. 803 */ 804 static inline int rhashtable_insert_fast( 805 struct rhashtable *ht, struct rhash_head *obj, 806 const struct rhashtable_params params) 807 { 808 void *ret; 809 810 ret = __rhashtable_insert_fast(ht, NULL, obj, params, false); 811 if (IS_ERR(ret)) 812 return PTR_ERR(ret); 813 814 return ret == NULL ? 0 : -EEXIST; 815 } 816 817 /** 818 * rhltable_insert_key - insert object into hash list table 819 * @hlt: hash list table 820 * @key: the pointer to the key 821 * @list: pointer to hash list head inside object 822 * @params: hash table parameters 823 * 824 * Will take the per bucket bitlock to protect against mutual mutations 825 * on the same bucket. Multiple insertions may occur in parallel unless 826 * they map to the same bucket. 827 * 828 * It is safe to call this function from atomic context. 829 * 830 * Will trigger an automatic deferred table resizing if residency in the 831 * table grows beyond 70%. 832 */ 833 static inline int rhltable_insert_key( 834 struct rhltable *hlt, const void *key, struct rhlist_head *list, 835 const struct rhashtable_params params) 836 { 837 return PTR_ERR(__rhashtable_insert_fast(&hlt->ht, key, &list->rhead, 838 params, true)); 839 } 840 841 /** 842 * rhltable_insert - insert object into hash list table 843 * @hlt: hash list table 844 * @list: pointer to hash list head inside object 845 * @params: hash table parameters 846 * 847 * Will take the per bucket bitlock to protect against mutual mutations 848 * on the same bucket. Multiple insertions may occur in parallel unless 849 * they map to the same bucket. 850 * 851 * It is safe to call this function from atomic context. 852 * 853 * Will trigger an automatic deferred table resizing if residency in the 854 * table grows beyond 70%. 855 */ 856 static inline int rhltable_insert( 857 struct rhltable *hlt, struct rhlist_head *list, 858 const struct rhashtable_params params) 859 { 860 const char *key = rht_obj(&hlt->ht, &list->rhead); 861 862 key += params.key_offset; 863 864 return rhltable_insert_key(hlt, key, list, params); 865 } 866 867 /** 868 * rhashtable_lookup_insert_fast - lookup and insert object into hash table 869 * @ht: hash table 870 * @obj: pointer to hash head inside object 871 * @params: hash table parameters 872 * 873 * This lookup function may only be used for fixed key hash table (key_len 874 * parameter set). It will BUG() if used inappropriately. 875 * 876 * It is safe to call this function from atomic context. 877 * 878 * Will trigger an automatic deferred table resizing if residency in the 879 * table grows beyond 70%. 880 */ 881 static inline int rhashtable_lookup_insert_fast( 882 struct rhashtable *ht, struct rhash_head *obj, 883 const struct rhashtable_params params) 884 { 885 const char *key = rht_obj(ht, obj); 886 void *ret; 887 888 BUG_ON(ht->p.obj_hashfn); 889 890 ret = __rhashtable_insert_fast(ht, key + ht->p.key_offset, obj, params, 891 false); 892 if (IS_ERR(ret)) 893 return PTR_ERR(ret); 894 895 return ret == NULL ? 0 : -EEXIST; 896 } 897 898 /** 899 * rhashtable_lookup_get_insert_fast - lookup and insert object into hash table 900 * @ht: hash table 901 * @obj: pointer to hash head inside object 902 * @params: hash table parameters 903 * 904 * Just like rhashtable_lookup_insert_fast(), but this function returns the 905 * object if it exists, NULL if it did not and the insertion was successful, 906 * and an ERR_PTR otherwise. 907 */ 908 static inline void *rhashtable_lookup_get_insert_fast( 909 struct rhashtable *ht, struct rhash_head *obj, 910 const struct rhashtable_params params) 911 { 912 const char *key = rht_obj(ht, obj); 913 914 BUG_ON(ht->p.obj_hashfn); 915 916 return __rhashtable_insert_fast(ht, key + ht->p.key_offset, obj, params, 917 false); 918 } 919 920 /** 921 * rhashtable_lookup_insert_key - search and insert object to hash table 922 * with explicit key 923 * @ht: hash table 924 * @key: key 925 * @obj: pointer to hash head inside object 926 * @params: hash table parameters 927 * 928 * Lookups may occur in parallel with hashtable mutations and resizing. 929 * 930 * Will trigger an automatic deferred table resizing if residency in the 931 * table grows beyond 70%. 932 * 933 * Returns zero on success. 934 */ 935 static inline int rhashtable_lookup_insert_key( 936 struct rhashtable *ht, const void *key, struct rhash_head *obj, 937 const struct rhashtable_params params) 938 { 939 void *ret; 940 941 BUG_ON(!ht->p.obj_hashfn || !key); 942 943 ret = __rhashtable_insert_fast(ht, key, obj, params, false); 944 if (IS_ERR(ret)) 945 return PTR_ERR(ret); 946 947 return ret == NULL ? 0 : -EEXIST; 948 } 949 950 /** 951 * rhashtable_lookup_get_insert_key - lookup and insert object into hash table 952 * @ht: hash table 953 * @obj: pointer to hash head inside object 954 * @params: hash table parameters 955 * @data: pointer to element data already in hashes 956 * 957 * Just like rhashtable_lookup_insert_key(), but this function returns the 958 * object if it exists, NULL if it does not and the insertion was successful, 959 * and an ERR_PTR otherwise. 960 */ 961 static inline void *rhashtable_lookup_get_insert_key( 962 struct rhashtable *ht, const void *key, struct rhash_head *obj, 963 const struct rhashtable_params params) 964 { 965 BUG_ON(!ht->p.obj_hashfn || !key); 966 967 return __rhashtable_insert_fast(ht, key, obj, params, false); 968 } 969 970 /* Internal function, please use rhashtable_remove_fast() instead */ 971 static inline int __rhashtable_remove_fast_one( 972 struct rhashtable *ht, struct bucket_table *tbl, 973 struct rhash_head *obj, const struct rhashtable_params params, 974 bool rhlist) 975 { 976 struct rhash_lock_head __rcu **bkt; 977 struct rhash_head __rcu **pprev; 978 struct rhash_head *he; 979 unsigned int hash; 980 int err = -ENOENT; 981 982 hash = rht_head_hashfn(ht, tbl, obj, params); 983 bkt = rht_bucket_var(tbl, hash); 984 if (!bkt) 985 return -ENOENT; 986 pprev = NULL; 987 rht_lock(tbl, bkt); 988 989 rht_for_each_from(he, rht_ptr(bkt, tbl, hash), tbl, hash) { 990 struct rhlist_head *list; 991 992 list = container_of(he, struct rhlist_head, rhead); 993 994 if (he != obj) { 995 struct rhlist_head __rcu **lpprev; 996 997 pprev = &he->next; 998 999 if (!rhlist) 1000 continue; 1001 1002 do { 1003 lpprev = &list->next; 1004 list = rht_dereference_bucket(list->next, 1005 tbl, hash); 1006 } while (list && obj != &list->rhead); 1007 1008 if (!list) 1009 continue; 1010 1011 list = rht_dereference_bucket(list->next, tbl, hash); 1012 RCU_INIT_POINTER(*lpprev, list); 1013 err = 0; 1014 break; 1015 } 1016 1017 obj = rht_dereference_bucket(obj->next, tbl, hash); 1018 err = 1; 1019 1020 if (rhlist) { 1021 list = rht_dereference_bucket(list->next, tbl, hash); 1022 if (list) { 1023 RCU_INIT_POINTER(list->rhead.next, obj); 1024 obj = &list->rhead; 1025 err = 0; 1026 } 1027 } 1028 1029 if (pprev) { 1030 rcu_assign_pointer(*pprev, obj); 1031 rht_unlock(tbl, bkt); 1032 } else { 1033 rht_assign_unlock(tbl, bkt, obj); 1034 } 1035 goto unlocked; 1036 } 1037 1038 rht_unlock(tbl, bkt); 1039 unlocked: 1040 if (err > 0) { 1041 atomic_dec(&ht->nelems); 1042 if (unlikely(ht->p.automatic_shrinking && 1043 rht_shrink_below_30(ht, tbl))) 1044 schedule_work(&ht->run_work); 1045 err = 0; 1046 } 1047 1048 return err; 1049 } 1050 1051 /* Internal function, please use rhashtable_remove_fast() instead */ 1052 static inline int __rhashtable_remove_fast( 1053 struct rhashtable *ht, struct rhash_head *obj, 1054 const struct rhashtable_params params, bool rhlist) 1055 { 1056 struct bucket_table *tbl; 1057 int err; 1058 1059 rcu_read_lock(); 1060 1061 tbl = rht_dereference_rcu(ht->tbl, ht); 1062 1063 /* Because we have already taken (and released) the bucket 1064 * lock in old_tbl, if we find that future_tbl is not yet 1065 * visible then that guarantees the entry to still be in 1066 * the old tbl if it exists. 1067 */ 1068 while ((err = __rhashtable_remove_fast_one(ht, tbl, obj, params, 1069 rhlist)) && 1070 (tbl = rht_dereference_rcu(tbl->future_tbl, ht))) 1071 ; 1072 1073 rcu_read_unlock(); 1074 1075 return err; 1076 } 1077 1078 /** 1079 * rhashtable_remove_fast - remove object from hash table 1080 * @ht: hash table 1081 * @obj: pointer to hash head inside object 1082 * @params: hash table parameters 1083 * 1084 * Since the hash chain is single linked, the removal operation needs to 1085 * walk the bucket chain upon removal. The removal operation is thus 1086 * considerable slow if the hash table is not correctly sized. 1087 * 1088 * Will automatically shrink the table if permitted when residency drops 1089 * below 30%. 1090 * 1091 * Returns zero on success, -ENOENT if the entry could not be found. 1092 */ 1093 static inline int rhashtable_remove_fast( 1094 struct rhashtable *ht, struct rhash_head *obj, 1095 const struct rhashtable_params params) 1096 { 1097 return __rhashtable_remove_fast(ht, obj, params, false); 1098 } 1099 1100 /** 1101 * rhltable_remove - remove object from hash list table 1102 * @hlt: hash list table 1103 * @list: pointer to hash list head inside object 1104 * @params: hash table parameters 1105 * 1106 * Since the hash chain is single linked, the removal operation needs to 1107 * walk the bucket chain upon removal. The removal operation is thus 1108 * considerable slow if the hash table is not correctly sized. 1109 * 1110 * Will automatically shrink the table if permitted when residency drops 1111 * below 30% 1112 * 1113 * Returns zero on success, -ENOENT if the entry could not be found. 1114 */ 1115 static inline int rhltable_remove( 1116 struct rhltable *hlt, struct rhlist_head *list, 1117 const struct rhashtable_params params) 1118 { 1119 return __rhashtable_remove_fast(&hlt->ht, &list->rhead, params, true); 1120 } 1121 1122 /* Internal function, please use rhashtable_replace_fast() instead */ 1123 static inline int __rhashtable_replace_fast( 1124 struct rhashtable *ht, struct bucket_table *tbl, 1125 struct rhash_head *obj_old, struct rhash_head *obj_new, 1126 const struct rhashtable_params params) 1127 { 1128 struct rhash_lock_head __rcu **bkt; 1129 struct rhash_head __rcu **pprev; 1130 struct rhash_head *he; 1131 unsigned int hash; 1132 int err = -ENOENT; 1133 1134 /* Minimally, the old and new objects must have same hash 1135 * (which should mean identifiers are the same). 1136 */ 1137 hash = rht_head_hashfn(ht, tbl, obj_old, params); 1138 if (hash != rht_head_hashfn(ht, tbl, obj_new, params)) 1139 return -EINVAL; 1140 1141 bkt = rht_bucket_var(tbl, hash); 1142 if (!bkt) 1143 return -ENOENT; 1144 1145 pprev = NULL; 1146 rht_lock(tbl, bkt); 1147 1148 rht_for_each_from(he, rht_ptr(bkt, tbl, hash), tbl, hash) { 1149 if (he != obj_old) { 1150 pprev = &he->next; 1151 continue; 1152 } 1153 1154 rcu_assign_pointer(obj_new->next, obj_old->next); 1155 if (pprev) { 1156 rcu_assign_pointer(*pprev, obj_new); 1157 rht_unlock(tbl, bkt); 1158 } else { 1159 rht_assign_unlock(tbl, bkt, obj_new); 1160 } 1161 err = 0; 1162 goto unlocked; 1163 } 1164 1165 rht_unlock(tbl, bkt); 1166 1167 unlocked: 1168 return err; 1169 } 1170 1171 /** 1172 * rhashtable_replace_fast - replace an object in hash table 1173 * @ht: hash table 1174 * @obj_old: pointer to hash head inside object being replaced 1175 * @obj_new: pointer to hash head inside object which is new 1176 * @params: hash table parameters 1177 * 1178 * Replacing an object doesn't affect the number of elements in the hash table 1179 * or bucket, so we don't need to worry about shrinking or expanding the 1180 * table here. 1181 * 1182 * Returns zero on success, -ENOENT if the entry could not be found, 1183 * -EINVAL if hash is not the same for the old and new objects. 1184 */ 1185 static inline int rhashtable_replace_fast( 1186 struct rhashtable *ht, struct rhash_head *obj_old, 1187 struct rhash_head *obj_new, 1188 const struct rhashtable_params params) 1189 { 1190 struct bucket_table *tbl; 1191 int err; 1192 1193 rcu_read_lock(); 1194 1195 tbl = rht_dereference_rcu(ht->tbl, ht); 1196 1197 /* Because we have already taken (and released) the bucket 1198 * lock in old_tbl, if we find that future_tbl is not yet 1199 * visible then that guarantees the entry to still be in 1200 * the old tbl if it exists. 1201 */ 1202 while ((err = __rhashtable_replace_fast(ht, tbl, obj_old, 1203 obj_new, params)) && 1204 (tbl = rht_dereference_rcu(tbl->future_tbl, ht))) 1205 ; 1206 1207 rcu_read_unlock(); 1208 1209 return err; 1210 } 1211 1212 /** 1213 * rhltable_walk_enter - Initialise an iterator 1214 * @hlt: Table to walk over 1215 * @iter: Hash table Iterator 1216 * 1217 * This function prepares a hash table walk. 1218 * 1219 * Note that if you restart a walk after rhashtable_walk_stop you 1220 * may see the same object twice. Also, you may miss objects if 1221 * there are removals in between rhashtable_walk_stop and the next 1222 * call to rhashtable_walk_start. 1223 * 1224 * For a completely stable walk you should construct your own data 1225 * structure outside the hash table. 1226 * 1227 * This function may be called from any process context, including 1228 * non-preemptable context, but cannot be called from softirq or 1229 * hardirq context. 1230 * 1231 * You must call rhashtable_walk_exit after this function returns. 1232 */ 1233 static inline void rhltable_walk_enter(struct rhltable *hlt, 1234 struct rhashtable_iter *iter) 1235 { 1236 return rhashtable_walk_enter(&hlt->ht, iter); 1237 } 1238 1239 /** 1240 * rhltable_free_and_destroy - free elements and destroy hash list table 1241 * @hlt: the hash list table to destroy 1242 * @free_fn: callback to release resources of element 1243 * @arg: pointer passed to free_fn 1244 * 1245 * See documentation for rhashtable_free_and_destroy. 1246 */ 1247 static inline void rhltable_free_and_destroy(struct rhltable *hlt, 1248 void (*free_fn)(void *ptr, 1249 void *arg), 1250 void *arg) 1251 { 1252 return rhashtable_free_and_destroy(&hlt->ht, free_fn, arg); 1253 } 1254 1255 static inline void rhltable_destroy(struct rhltable *hlt) 1256 { 1257 return rhltable_free_and_destroy(hlt, NULL, NULL); 1258 } 1259 1260 #endif /* _LINUX_RHASHTABLE_H */ 1261