Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 24171
b: refs/heads/master
c: f7c2967
h: refs/heads/master
i:
  24169: 22fbda8
  24167: eedffbe
v: v3
  • Loading branch information
Akinobu Mita authored and Linus Torvalds committed Mar 26, 2006
1 parent 68720b3 commit da2bde0
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 117 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b1bb9522daf2fb49c5793d128023e9ca1e08e13b
refs/heads/master: f7c29678739e69b8298496f926e87e5991e745e8
8 changes: 8 additions & 0 deletions trunk/arch/alpha/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ config RWSEM_XCHGADD_ALGORITHM
bool
default y

config GENERIC_FIND_NEXT_BIT
bool
default y

config GENERIC_CALIBRATE_DELAY
bool
default y
Expand Down Expand Up @@ -447,6 +451,10 @@ config ALPHA_IRONGATE
depends on ALPHA_NAUTILUS
default y

config GENERIC_HWEIGHT
bool
default y if !ALPHA_EV6 && !ALPHA_EV67

config ALPHA_AVANTI
bool
depends on ALPHA_XL || ALPHA_AVANTI_CH
Expand Down
123 changes: 7 additions & 116 deletions trunk/include/asm-alpha/bitops.h
Original file line number Diff line number Diff line change
Expand Up @@ -319,9 +319,9 @@ static inline int fls(int word)
return 64 - __kernel_ctlz(word & 0xffffffff);
}
#else
#define fls generic_fls
#include <asm-generic/bitops/fls.h>
#endif
#define fls64 generic_fls64
#include <asm-generic/bitops/fls64.h>

/* Compute powers of two for the given integer. */
static inline long floor_log2(unsigned long word)
Expand Down Expand Up @@ -358,112 +358,12 @@ static inline unsigned long hweight64(unsigned long w)
#define hweight16(x) (unsigned int) hweight64((x) & 0xfffful)
#define hweight8(x) (unsigned int) hweight64((x) & 0xfful)
#else
static inline unsigned long hweight64(unsigned long w)
{
unsigned long result;
for (result = 0; w ; w >>= 1)
result += (w & 1);
return result;
}

#define hweight32(x) generic_hweight32(x)
#define hweight16(x) generic_hweight16(x)
#define hweight8(x) generic_hweight8(x)
#include <asm-generic/bitops/hweight.h>
#endif

#endif /* __KERNEL__ */

/*
* Find next zero bit in a bitmap reasonably efficiently..
*/
static inline unsigned long
find_next_zero_bit(const void *addr, unsigned long size, unsigned long offset)
{
const unsigned long *p = addr;
unsigned long result = offset & ~63UL;
unsigned long tmp;

p += offset >> 6;
if (offset >= size)
return size;
size -= result;
offset &= 63UL;
if (offset) {
tmp = *(p++);
tmp |= ~0UL >> (64-offset);
if (size < 64)
goto found_first;
if (~tmp)
goto found_middle;
size -= 64;
result += 64;
}
while (size & ~63UL) {
if (~(tmp = *(p++)))
goto found_middle;
result += 64;
size -= 64;
}
if (!size)
return result;
tmp = *p;
found_first:
tmp |= ~0UL << size;
if (tmp == ~0UL) /* Are any bits zero? */
return result + size; /* Nope. */
found_middle:
return result + ffz(tmp);
}

/*
* Find next one bit in a bitmap reasonably efficiently.
*/
static inline unsigned long
find_next_bit(const void * addr, unsigned long size, unsigned long offset)
{
const unsigned long *p = addr;
unsigned long result = offset & ~63UL;
unsigned long tmp;

p += offset >> 6;
if (offset >= size)
return size;
size -= result;
offset &= 63UL;
if (offset) {
tmp = *(p++);
tmp &= ~0UL << offset;
if (size < 64)
goto found_first;
if (tmp)
goto found_middle;
size -= 64;
result += 64;
}
while (size & ~63UL) {
if ((tmp = *(p++)))
goto found_middle;
result += 64;
size -= 64;
}
if (!size)
return result;
tmp = *p;
found_first:
tmp &= ~0UL >> (64 - size);
if (!tmp)
return result + size;
found_middle:
return result + __ffs(tmp);
}

/*
* The optimizer actually does good code for this case.
*/
#define find_first_zero_bit(addr, size) \
find_next_zero_bit((addr), (size), 0)
#define find_first_bit(addr, size) \
find_next_bit((addr), (size), 0)
#include <asm-generic/bitops/find.h>

#ifdef __KERNEL__

Expand All @@ -487,21 +387,12 @@ sched_find_first_bit(unsigned long b[3])
return __ffs(b0) + ofs;
}

#include <asm-generic/bitops/ext2-non-atomic.h>

#define ext2_set_bit __test_and_set_bit
#define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a)
#define ext2_clear_bit __test_and_clear_bit
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
#define ext2_test_bit test_bit
#define ext2_find_first_zero_bit find_first_zero_bit
#define ext2_find_next_zero_bit find_next_zero_bit

/* Bitmap functions for the minix filesystem. */
#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,addr)
#define minix_set_bit(nr,addr) __set_bit(nr,addr)
#define minix_test_and_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
#define minix_test_bit(nr,addr) test_bit(nr,addr)
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)

#include <asm-generic/bitops/minix.h>

#endif /* __KERNEL__ */

Expand Down

0 comments on commit da2bde0

Please sign in to comment.