lib: inline _find_next_bit() wrappers

lib/find_bit.c declares five single-line wrappers for _find_next_bit().
We may turn those wrappers to inline functions.  It eliminates unneeded
function calls and opens room for compile-time optimizations.

Link: https://lkml.kernel.org/r/20210401003153.97325-8-yury.norov@gmail.com
Signed-off-by: Yury Norov <yury.norov@gmail.com>
Acked-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Alexey Klimov <aklimov@redhat.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: David Sterba <dsterba@suse.com>
Cc: Dennis Zhou <dennis@kernel.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Jianpeng Ma <jianpeng.ma@intel.com>
Cc: Joe Perches <joe@perches.com>
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Rich Felker <dalias@libc.org>
Cc: Stefano Brivio <sbrivio@redhat.com>
Cc: Wei Yang <richard.weiyang@linux.alibaba.com>
Cc: Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: Yoshinori Sato <ysato@users.osdn.me>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Yury Norov 2021-05-06 18:03:03 -07:00 committed by Linus Torvalds
parent 78e48f0667
commit 5c88af59f9
3 changed files with 37 additions and 64 deletions

View File

@ -2,6 +2,10 @@
#ifndef _ASM_GENERIC_BITOPS_FIND_H_ #ifndef _ASM_GENERIC_BITOPS_FIND_H_
#define _ASM_GENERIC_BITOPS_FIND_H_ #define _ASM_GENERIC_BITOPS_FIND_H_
extern unsigned long _find_next_bit(const unsigned long *addr1,
const unsigned long *addr2, unsigned long nbits,
unsigned long start, unsigned long invert, unsigned long le);
#ifndef find_next_bit #ifndef find_next_bit
/** /**
* find_next_bit - find the next set bit in a memory region * find_next_bit - find the next set bit in a memory region
@ -12,8 +16,12 @@
* Returns the bit number for the next set bit * Returns the bit number for the next set bit
* If no bits are set, returns @size. * If no bits are set, returns @size.
*/ */
extern unsigned long find_next_bit(const unsigned long *addr, unsigned long static inline
size, unsigned long offset); unsigned long find_next_bit(const unsigned long *addr, unsigned long size,
unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, 0UL, 0);
}
#endif #endif
#ifndef find_next_and_bit #ifndef find_next_and_bit
@ -27,9 +35,13 @@ extern unsigned long find_next_bit(const unsigned long *addr, unsigned long
* Returns the bit number for the next set bit * Returns the bit number for the next set bit
* If no bits are set, returns @size. * If no bits are set, returns @size.
*/ */
extern unsigned long find_next_and_bit(const unsigned long *addr1, static inline
unsigned long find_next_and_bit(const unsigned long *addr1,
const unsigned long *addr2, unsigned long size, const unsigned long *addr2, unsigned long size,
unsigned long offset); unsigned long offset)
{
return _find_next_bit(addr1, addr2, size, offset, 0UL, 0);
}
#endif #endif
#ifndef find_next_zero_bit #ifndef find_next_zero_bit
@ -42,8 +54,12 @@ extern unsigned long find_next_and_bit(const unsigned long *addr1,
* Returns the bit number of the next zero bit * Returns the bit number of the next zero bit
* If no bits are zero, returns @size. * If no bits are zero, returns @size.
*/ */
extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned static inline
long size, unsigned long offset); unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size,
unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, ~0UL, 0);
}
#endif #endif
#ifdef CONFIG_GENERIC_FIND_FIRST_BIT #ifdef CONFIG_GENERIC_FIND_FIRST_BIT

View File

@ -2,6 +2,7 @@
#ifndef _ASM_GENERIC_BITOPS_LE_H_ #ifndef _ASM_GENERIC_BITOPS_LE_H_
#define _ASM_GENERIC_BITOPS_LE_H_ #define _ASM_GENERIC_BITOPS_LE_H_
#include <asm-generic/bitops/find.h>
#include <asm/types.h> #include <asm/types.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
@ -32,13 +33,21 @@ static inline unsigned long find_first_zero_bit_le(const void *addr,
#define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7) #define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7)
#ifndef find_next_zero_bit_le #ifndef find_next_zero_bit_le
extern unsigned long find_next_zero_bit_le(const void *addr, static inline
unsigned long size, unsigned long offset); unsigned long find_next_zero_bit_le(const void *addr, unsigned
long size, unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, ~0UL, 1);
}
#endif #endif
#ifndef find_next_bit_le #ifndef find_next_bit_le
extern unsigned long find_next_bit_le(const void *addr, static inline
unsigned long size, unsigned long offset); unsigned long find_next_bit_le(const void *addr, unsigned
long size, unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, 0UL, 1);
}
#endif #endif
#ifndef find_first_zero_bit_le #ifndef find_first_zero_bit_le

View File

@ -29,7 +29,7 @@
* searching it for one bits. * searching it for one bits.
* - The optional "addr2", which is anded with "addr1" if present. * - The optional "addr2", which is anded with "addr1" if present.
*/ */
static unsigned long _find_next_bit(const unsigned long *addr1, unsigned long _find_next_bit(const unsigned long *addr1,
const unsigned long *addr2, unsigned long nbits, const unsigned long *addr2, unsigned long nbits,
unsigned long start, unsigned long invert, unsigned long le) unsigned long start, unsigned long invert, unsigned long le)
{ {
@ -68,37 +68,7 @@ static unsigned long _find_next_bit(const unsigned long *addr1,
return min(start + __ffs(tmp), nbits); return min(start + __ffs(tmp), nbits);
} }
#endif EXPORT_SYMBOL(_find_next_bit);
#ifndef find_next_bit
/*
* Find the next set bit in a memory region.
*/
unsigned long find_next_bit(const unsigned long *addr, unsigned long size,
unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, 0UL, 0);
}
EXPORT_SYMBOL(find_next_bit);
#endif
#ifndef find_next_zero_bit
unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size,
unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, ~0UL, 0);
}
EXPORT_SYMBOL(find_next_zero_bit);
#endif
#if !defined(find_next_and_bit)
unsigned long find_next_and_bit(const unsigned long *addr1,
const unsigned long *addr2, unsigned long size,
unsigned long offset)
{
return _find_next_bit(addr1, addr2, size, offset, 0UL, 0);
}
EXPORT_SYMBOL(find_next_and_bit);
#endif #endif
#ifndef find_first_bit #ifndef find_first_bit
@ -157,28 +127,6 @@ unsigned long find_last_bit(const unsigned long *addr, unsigned long size)
EXPORT_SYMBOL(find_last_bit); EXPORT_SYMBOL(find_last_bit);
#endif #endif
#ifdef __BIG_ENDIAN
#ifndef find_next_zero_bit_le
unsigned long find_next_zero_bit_le(const void *addr, unsigned
long size, unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, ~0UL, 1);
}
EXPORT_SYMBOL(find_next_zero_bit_le);
#endif
#ifndef find_next_bit_le
unsigned long find_next_bit_le(const void *addr, unsigned
long size, unsigned long offset)
{
return _find_next_bit(addr, NULL, size, offset, 0UL, 1);
}
EXPORT_SYMBOL(find_next_bit_le);
#endif
#endif /* __BIG_ENDIAN */
unsigned long find_next_clump8(unsigned long *clump, const unsigned long *addr, unsigned long find_next_clump8(unsigned long *clump, const unsigned long *addr,
unsigned long size, unsigned long offset) unsigned long size, unsigned long offset)
{ {