Commit a2812e17 authored by Akinobu Mita's avatar Akinobu Mita Committed by Linus Torvalds

arch: add #define for each of optimized find bitops

The style that we normally use in asm-generic is to test the macro itself
for existence, so in asm-generic, do:

	#ifndef find_next_zero_bit_le
	extern unsigned long find_next_zero_bit_le(const void *addr,
		unsigned long size, unsigned long offset);
	#endif

and in the architectures, write

	static inline unsigned long find_next_zero_bit_le(const void *addr,
		unsigned long size, unsigned long offset)
	#define find_next_zero_bit_le find_next_zero_bit_le

This adds the #define for each of the optimized find bitops in the
architectures.
Suggested-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
Acked-by: default avatarHans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Acked-by: default avatarGreg Ungerer <gerg@uclinux.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Acked-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e0819410
...@@ -326,16 +326,19 @@ static inline int find_first_zero_bit_le(const void *p, unsigned size) ...@@ -326,16 +326,19 @@ static inline int find_first_zero_bit_le(const void *p, unsigned size)
{ {
return _find_first_zero_bit_le(p, size); return _find_first_zero_bit_le(p, size);
} }
#define find_first_zero_bit_le find_first_zero_bit_le
static inline int find_next_zero_bit_le(const void *p, int size, int offset) static inline int find_next_zero_bit_le(const void *p, int size, int offset)
{ {
return _find_next_zero_bit_le(p, size, offset); return _find_next_zero_bit_le(p, size, offset);
} }
#define find_next_zero_bit_le find_next_zero_bit_le
static inline int find_next_bit_le(const void *p, int size, int offset) static inline int find_next_bit_le(const void *p, int size, int offset)
{ {
return _find_next_bit_le(p, size, offset); return _find_next_bit_le(p, size, offset);
} }
#define find_next_bit_le find_next_bit_le
/* /*
* Ext2 is defined to use little-endian byte ordering. * Ext2 is defined to use little-endian byte ordering.
......
...@@ -270,14 +270,21 @@ static inline int __fls(unsigned long word) ...@@ -270,14 +270,21 @@ static inline int __fls(unsigned long word)
unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long find_first_zero_bit(const unsigned long *addr,
unsigned long size); unsigned long size);
#define find_first_zero_bit find_first_zero_bit
unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long find_next_zero_bit(const unsigned long *addr,
unsigned long size, unsigned long size,
unsigned long offset); unsigned long offset);
#define find_next_zero_bit find_next_zero_bit
unsigned long find_first_bit(const unsigned long *addr, unsigned long find_first_bit(const unsigned long *addr,
unsigned long size); unsigned long size);
#define find_first_bit find_first_bit
unsigned long find_next_bit(const unsigned long *addr, unsigned long find_next_bit(const unsigned long *addr,
unsigned long size, unsigned long size,
unsigned long offset); unsigned long offset);
#define find_next_bit find_next_bit
/* /*
* ffs: find first bit set. This is defined the same way as * ffs: find first bit set. This is defined the same way as
...@@ -299,6 +306,14 @@ static inline int ffs(unsigned long word) ...@@ -299,6 +306,14 @@ static inline int ffs(unsigned long word)
#include <asm-generic/bitops/hweight.h> #include <asm-generic/bitops/hweight.h>
#include <asm-generic/bitops/lock.h> #include <asm-generic/bitops/lock.h>
extern unsigned long find_next_zero_bit_le(const void *addr,
unsigned long size, unsigned long offset);
#define find_next_zero_bit_le find_next_zero_bit_le
extern unsigned long find_next_bit_le(const void *addr,
unsigned long size, unsigned long offset);
#define find_next_bit_le find_next_bit_le
#include <asm-generic/bitops/le.h> #include <asm-generic/bitops/le.h>
#include <asm-generic/bitops/ext2-atomic.h> #include <asm-generic/bitops/ext2-atomic.h>
......
...@@ -200,6 +200,7 @@ static inline int find_first_zero_bit(const unsigned long *vaddr, ...@@ -200,6 +200,7 @@ static inline int find_first_zero_bit(const unsigned long *vaddr,
res += ((long)p - (long)vaddr - 4) * 8; res += ((long)p - (long)vaddr - 4) * 8;
return res < size ? res : size; return res < size ? res : size;
} }
#define find_first_zero_bit find_first_zero_bit
static inline int find_next_zero_bit(const unsigned long *vaddr, int size, static inline int find_next_zero_bit(const unsigned long *vaddr, int size,
int offset) int offset)
...@@ -229,6 +230,7 @@ static inline int find_next_zero_bit(const unsigned long *vaddr, int size, ...@@ -229,6 +230,7 @@ static inline int find_next_zero_bit(const unsigned long *vaddr, int size,
/* No zero yet, search remaining full bytes for a zero */ /* No zero yet, search remaining full bytes for a zero */
return offset + find_first_zero_bit(p, size - offset); return offset + find_first_zero_bit(p, size - offset);
} }
#define find_next_zero_bit find_next_zero_bit
static inline int find_first_bit(const unsigned long *vaddr, unsigned size) static inline int find_first_bit(const unsigned long *vaddr, unsigned size)
{ {
...@@ -253,6 +255,7 @@ static inline int find_first_bit(const unsigned long *vaddr, unsigned size) ...@@ -253,6 +255,7 @@ static inline int find_first_bit(const unsigned long *vaddr, unsigned size)
res += ((long)p - (long)vaddr - 4) * 8; res += ((long)p - (long)vaddr - 4) * 8;
return res < size ? res : size; return res < size ? res : size;
} }
#define find_first_bit find_first_bit
static inline int find_next_bit(const unsigned long *vaddr, int size, static inline int find_next_bit(const unsigned long *vaddr, int size,
int offset) int offset)
...@@ -282,6 +285,7 @@ static inline int find_next_bit(const unsigned long *vaddr, int size, ...@@ -282,6 +285,7 @@ static inline int find_next_bit(const unsigned long *vaddr, int size,
/* No one yet, search remaining full bytes for a one */ /* No one yet, search remaining full bytes for a one */
return offset + find_first_bit(p, size - offset); return offset + find_first_bit(p, size - offset);
} }
#define find_next_bit find_next_bit
/* /*
* ffz = Find First Zero in word. Undefined if no zero exists, * ffz = Find First Zero in word. Undefined if no zero exists,
...@@ -398,6 +402,7 @@ static inline int find_first_zero_bit_le(const void *vaddr, unsigned size) ...@@ -398,6 +402,7 @@ static inline int find_first_zero_bit_le(const void *vaddr, unsigned size)
res += (p - addr) * 32; res += (p - addr) * 32;
return res < size ? res : size; return res < size ? res : size;
} }
#define find_first_zero_bit_le find_first_zero_bit_le
static inline unsigned long find_next_zero_bit_le(const void *addr, static inline unsigned long find_next_zero_bit_le(const void *addr,
unsigned long size, unsigned long offset) unsigned long size, unsigned long offset)
...@@ -427,6 +432,7 @@ static inline unsigned long find_next_zero_bit_le(const void *addr, ...@@ -427,6 +432,7 @@ static inline unsigned long find_next_zero_bit_le(const void *addr,
/* No zero yet, search remaining full bytes for a zero */ /* No zero yet, search remaining full bytes for a zero */
return offset + find_first_zero_bit_le(p, size - offset); return offset + find_first_zero_bit_le(p, size - offset);
} }
#define find_next_zero_bit_le find_next_zero_bit_le
static inline int find_first_bit_le(const void *vaddr, unsigned size) static inline int find_first_bit_le(const void *vaddr, unsigned size)
{ {
...@@ -451,6 +457,7 @@ static inline int find_first_bit_le(const void *vaddr, unsigned size) ...@@ -451,6 +457,7 @@ static inline int find_first_bit_le(const void *vaddr, unsigned size)
res += (p - addr) * 32; res += (p - addr) * 32;
return res < size ? res : size; return res < size ? res : size;
} }
#define find_first_bit_le find_first_bit_le
static inline unsigned long find_next_bit_le(const void *addr, static inline unsigned long find_next_bit_le(const void *addr,
unsigned long size, unsigned long offset) unsigned long size, unsigned long offset)
...@@ -480,6 +487,7 @@ static inline unsigned long find_next_bit_le(const void *addr, ...@@ -480,6 +487,7 @@ static inline unsigned long find_next_bit_le(const void *addr,
/* No set bit yet, search remaining full bytes for a set bit */ /* No set bit yet, search remaining full bytes for a set bit */
return offset + find_first_bit_le(p, size - offset); return offset + find_first_bit_le(p, size - offset);
} }
#define find_next_bit_le find_next_bit_le
/* Bitmap functions for the ext2 filesystem. */ /* Bitmap functions for the ext2 filesystem. */
......
...@@ -319,6 +319,7 @@ static inline unsigned long find_next_zero_bit_le(void *addr, unsigned long size ...@@ -319,6 +319,7 @@ static inline unsigned long find_next_zero_bit_le(void *addr, unsigned long size
found_middle: found_middle:
return result + ffz(__swab32(tmp)); return result + ffz(__swab32(tmp));
} }
#define find_next_zero_bit_le find_next_zero_bit_le
static inline unsigned long find_next_bit_le(const void *addr, unsigned static inline unsigned long find_next_bit_le(const void *addr, unsigned
long size, unsigned long offset) long size, unsigned long offset)
...@@ -363,6 +364,7 @@ static inline unsigned long find_next_bit_le(const void *addr, unsigned ...@@ -363,6 +364,7 @@ static inline unsigned long find_next_bit_le(const void *addr, unsigned
found_middle_swap: found_middle_swap:
return result + __ffs(__swab32(tmp)); return result + __ffs(__swab32(tmp));
} }
#define find_next_bit_le find_next_bit_le
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -621,6 +621,7 @@ static inline unsigned long find_first_zero_bit(const unsigned long *addr, ...@@ -621,6 +621,7 @@ static inline unsigned long find_first_zero_bit(const unsigned long *addr,
bits = __ffz_word(bytes*8, __load_ulong_be(addr, bytes)); bits = __ffz_word(bytes*8, __load_ulong_be(addr, bytes));
return (bits < size) ? bits : size; return (bits < size) ? bits : size;
} }
#define find_first_zero_bit find_first_zero_bit
/** /**
* find_first_bit - find the first set bit in a memory region * find_first_bit - find the first set bit in a memory region
...@@ -641,6 +642,7 @@ static inline unsigned long find_first_bit(const unsigned long * addr, ...@@ -641,6 +642,7 @@ static inline unsigned long find_first_bit(const unsigned long * addr,
bits = __ffs_word(bytes*8, __load_ulong_be(addr, bytes)); bits = __ffs_word(bytes*8, __load_ulong_be(addr, bytes));
return (bits < size) ? bits : size; return (bits < size) ? bits : size;
} }
#define find_first_bit find_first_bit
/** /**
* find_next_zero_bit - find the first zero bit in a memory region * find_next_zero_bit - find the first zero bit in a memory region
...@@ -677,6 +679,7 @@ static inline int find_next_zero_bit (const unsigned long * addr, ...@@ -677,6 +679,7 @@ static inline int find_next_zero_bit (const unsigned long * addr,
} }
return offset + find_first_zero_bit(p, size); return offset + find_first_zero_bit(p, size);
} }
#define find_next_zero_bit find_next_zero_bit
/** /**
* find_next_bit - find the first set bit in a memory region * find_next_bit - find the first set bit in a memory region
...@@ -713,6 +716,7 @@ static inline int find_next_bit (const unsigned long * addr, ...@@ -713,6 +716,7 @@ static inline int find_next_bit (const unsigned long * addr,
} }
return offset + find_first_bit(p, size); return offset + find_first_bit(p, size);
} }
#define find_next_bit find_next_bit
/* /*
* Every architecture must define this function. It's the fastest * Every architecture must define this function. It's the fastest
...@@ -787,6 +791,7 @@ static inline int find_first_zero_bit_le(void *vaddr, unsigned int size) ...@@ -787,6 +791,7 @@ static inline int find_first_zero_bit_le(void *vaddr, unsigned int size)
bits = __ffz_word(bytes*8, __load_ulong_le(vaddr, bytes)); bits = __ffz_word(bytes*8, __load_ulong_le(vaddr, bytes));
return (bits < size) ? bits : size; return (bits < size) ? bits : size;
} }
#define find_first_zero_bit_le find_first_zero_bit_le
static inline int find_next_zero_bit_le(void *vaddr, unsigned long size, static inline int find_next_zero_bit_le(void *vaddr, unsigned long size,
unsigned long offset) unsigned long offset)
...@@ -816,6 +821,7 @@ static inline int find_next_zero_bit_le(void *vaddr, unsigned long size, ...@@ -816,6 +821,7 @@ static inline int find_next_zero_bit_le(void *vaddr, unsigned long size,
} }
return offset + find_first_zero_bit_le(p, size); return offset + find_first_zero_bit_le(p, size);
} }
#define find_next_zero_bit_le find_next_zero_bit_le
static inline unsigned long find_first_bit_le(void *vaddr, unsigned long size) static inline unsigned long find_first_bit_le(void *vaddr, unsigned long size)
{ {
...@@ -827,6 +833,7 @@ static inline unsigned long find_first_bit_le(void *vaddr, unsigned long size) ...@@ -827,6 +833,7 @@ static inline unsigned long find_first_bit_le(void *vaddr, unsigned long size)
bits = __ffs_word(bytes*8, __load_ulong_le(vaddr, bytes)); bits = __ffs_word(bytes*8, __load_ulong_le(vaddr, bytes));
return (bits < size) ? bits : size; return (bits < size) ? bits : size;
} }
#define find_first_bit_le find_first_bit_le
static inline int find_next_bit_le(void *vaddr, unsigned long size, static inline int find_next_bit_le(void *vaddr, unsigned long size,
unsigned long offset) unsigned long offset)
...@@ -856,6 +863,7 @@ static inline int find_next_bit_le(void *vaddr, unsigned long size, ...@@ -856,6 +863,7 @@ static inline int find_next_bit_le(void *vaddr, unsigned long size,
} }
return offset + find_first_bit_le(p, size); return offset + find_first_bit_le(p, size);
} }
#define find_next_bit_le find_next_bit_le
#define ext2_set_bit_atomic(lock, nr, addr) \ #define ext2_set_bit_atomic(lock, nr, addr) \
test_and_set_bit_le(nr, addr) test_and_set_bit_le(nr, addr)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment