On Thu, Apr 1, 2021 at 3:42 AM Yury Norov <yury.norov@xxxxxxxxx> wrote: > > 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. Acked-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Signed-off-by: Yury Norov <yury.norov@xxxxxxxxx> > Acked-by: Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx> > --- > include/asm-generic/bitops/find.h | 28 ++++++++++++---- > include/asm-generic/bitops/le.h | 17 +++++++--- > lib/find_bit.c | 56 ++----------------------------- > 3 files changed, 37 insertions(+), 64 deletions(-) > > diff --git a/include/asm-generic/bitops/find.h b/include/asm-generic/bitops/find.h > index 9fdf21302fdf..7ad70dab8e93 100644 > --- a/include/asm-generic/bitops/find.h > +++ b/include/asm-generic/bitops/find.h > @@ -2,6 +2,10 @@ > #ifndef _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 > /** > * 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 > * If no bits are set, returns @size. > */ > -extern unsigned long find_next_bit(const unsigned long *addr, unsigned long > - size, unsigned long offset); > +static inline > +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 > > #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 > * 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, > - unsigned long offset); > + unsigned long offset) > +{ > + return _find_next_bit(addr1, addr2, size, offset, 0UL, 0); > +} > #endif > > #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 > * If no bits are zero, returns @size. > */ > -extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned > - long size, unsigned long offset); > +static inline > +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 > > #ifdef CONFIG_GENERIC_FIND_FIRST_BIT > diff --git a/include/asm-generic/bitops/le.h b/include/asm-generic/bitops/le.h > index 188d3eba3ace..21305f6cea0b 100644 > --- a/include/asm-generic/bitops/le.h > +++ b/include/asm-generic/bitops/le.h > @@ -2,6 +2,7 @@ > #ifndef _ASM_GENERIC_BITOPS_LE_H_ > #define _ASM_GENERIC_BITOPS_LE_H_ > > +#include <asm-generic/bitops/find.h> > #include <asm/types.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) > > #ifndef find_next_zero_bit_le > -extern unsigned long find_next_zero_bit_le(const void *addr, > - unsigned long size, unsigned long offset); > +static inline > +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 > > #ifndef find_next_bit_le > -extern unsigned long find_next_bit_le(const void *addr, > - unsigned long size, unsigned long offset); > +static inline > +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 > > #ifndef find_first_zero_bit_le > diff --git a/lib/find_bit.c b/lib/find_bit.c > index f67f86fd2f62..b03a101367f8 100644 > --- a/lib/find_bit.c > +++ b/lib/find_bit.c > @@ -29,7 +29,7 @@ > * searching it for one bits. > * - 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, > 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); > } > -#endif > - > -#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); > +EXPORT_SYMBOL(_find_next_bit); > #endif > > #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); > #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 size, unsigned long offset) > { > -- > 2.25.1 > -- With Best Regards, Andy Shevchenko