mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-04 04:37:39 -04:00
rhashtable: consolidate hash computation in rht_key_get_hash()
The else-if and else branches in rht_key_get_hash() both compute a hash using either params.hashfn or jhash, differing only in the source of key_len (params.key_len vs ht->p.key_len). Merge the two branches into one by using the ternary `params.key_len ?: ht->p.key_len` to select the key length, removing the duplicated logic. This also improves the performance of the else branch which previously always used jhash and never fell through to jhash2. This branch is going to be used by BPF resizable hashmap, which wraps rhashtable: https://lore.kernel.org/bpf/20260205-rhash-v1-0-30dd6d63c462@meta.com/ Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
committed by
Herbert Xu
parent
68e96c9736
commit
c9429bf564
@@ -129,10 +129,10 @@ static __always_inline unsigned int rht_key_get_hash(struct rhashtable *ht,
|
||||
unsigned int hash;
|
||||
|
||||
/* params must be equal to ht->p if it isn't constant. */
|
||||
if (!__builtin_constant_p(params.key_len))
|
||||
if (!__builtin_constant_p(params.key_len)) {
|
||||
hash = ht->p.hashfn(key, ht->key_len, hash_rnd);
|
||||
else if (params.key_len) {
|
||||
unsigned int key_len = params.key_len;
|
||||
} else {
|
||||
unsigned int key_len = params.key_len ? : ht->p.key_len;
|
||||
|
||||
if (params.hashfn)
|
||||
hash = params.hashfn(key, key_len, hash_rnd);
|
||||
@@ -140,13 +140,6 @@ static __always_inline unsigned int rht_key_get_hash(struct rhashtable *ht,
|
||||
hash = jhash(key, key_len, hash_rnd);
|
||||
else
|
||||
hash = jhash2(key, key_len / sizeof(u32), hash_rnd);
|
||||
} else {
|
||||
unsigned int key_len = ht->p.key_len;
|
||||
|
||||
if (params.hashfn)
|
||||
hash = params.hashfn(key, key_len, hash_rnd);
|
||||
else
|
||||
hash = jhash(key, key_len, hash_rnd);
|
||||
}
|
||||
|
||||
return hash;
|
||||
|
||||
Reference in New Issue
Block a user