diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2024-06-10 11:47:06 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2024-06-19 12:34:34 -0700 |
commit | e60cc61153e61e4e38bd983492df9959e82ae4dc (patch) | |
tree | c3e9b33a0ad49b111aa0f9a13fe43ec8c04a0894 /samples/mei | |
parent | 6ba59ff4227927d3a8530fc2973b80e94b54d58f (diff) |
vfs: dcache: move hashlen_hash() from callers into d_hash()
Both __d_lookup_rcu() and __d_lookup_rcu_op_compare() have the full
'name_hash' value of the qstr that they want to look up, and mask it off
to just the low 32-bit hash before calling down to d_hash().
Other callers just load the 32-bit hash and pass it as the argument.
If we move the masking into d_hash() itself, it simplifies the two
callers that currently do the masking, and is a no-op for the other
cases. It doesn't actually change the generated code since the compiler
will inline d_hash() and see that the end result is the same.
[ Technically, since the parse tree changes, the code generation may not
be 100% the same, and for me on x86-64, this does result in gcc
switching the operands around for one 'cmpl' instruction. So not
necessarily the exact same code generation, but equivalent ]
However, this does encapsulate the 'd_hash()' operation more, and makes
the shift operation in particular be a "shift 32 bits right, return full
word". Which matches the instruction semantics on both x86-64 and arm64
better, since a 32-bit shift will clear the upper bits.
That makes the next step of introducing a "shift by runtime constant"
more obvious and generates the shift with no extraneous type masking.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'samples/mei')
0 files changed, 0 insertions, 0 deletions