x86/bitops: adjust partial first word handling in __find_next{,_zero}_bit()

There's no need to subtract "bit" in what is passed to __scanbit(), as the
other bits are zero anyway after the shift (in __find_next_bit()) or can
be made so (in __find_next_zero_bit()) by flipping negation and shift. (We
actually leverage the same facts in find_next{,_zero}_bit() as well.) This
way in __scanbit() the TZCNT alternative can be engaged.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2026-02-23 08:43:29 +01:00
1 parent 0c79dde780
commit 0e6f9fbb8a
1 file changed
+4 -4
+4 -4
View File
@@ -35,8 +35,8 @@ unsigned int __find_next_bit(
if ( bit != 0 )
{
/* Look for a bit in the first word. */
set = __scanbit(*p >> bit, BITS_PER_LONG - bit);
if ( set < (BITS_PER_LONG - bit) )
set = __scanbit(*p >> bit, BITS_PER_LONG);
if ( set < BITS_PER_LONG )
return (offset + set);
offset += BITS_PER_LONG - bit;
p++;
@@ -85,8 +85,8 @@ unsigned int __find_next_zero_bit(
if ( bit != 0 )
{
/* Look for zero in the first word. */
set = __scanbit(~(*p >> bit), BITS_PER_LONG - bit);
if ( set < (BITS_PER_LONG - bit) )
set = __scanbit(~*p >> bit, BITS_PER_LONG);
if ( set < BITS_PER_LONG )
return (offset + set);
offset += BITS_PER_LONG - bit;
p++;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.