mirror of https://gitee.com/openkylin/linux.git
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:
parent
78e48f0667
commit
5c88af59f9
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue