m68knommu: fix build error due to the lack of find_next_bit_le()
m68knommu can't build ext4, udf, and ocfs2 due to the lack of find_next_bit_le(). This implements find_next_bit_le() on m68knommu by duplicating the generic find_next_bit_le() in lib/find_next_bit.c. Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Acked-by: Greg Ungerer <gerg@uclinux.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
275ac74629
commit
e0819410db
|
@ -320,6 +320,50 @@ found_middle:
|
||||||
return result + ffz(__swab32(tmp));
|
return result + ffz(__swab32(tmp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned long find_next_bit_le(const void *addr, unsigned
|
||||||
|
long size, unsigned long offset)
|
||||||
|
{
|
||||||
|
const unsigned long *p = addr;
|
||||||
|
unsigned long result = offset & ~(BITS_PER_LONG - 1);
|
||||||
|
unsigned long tmp;
|
||||||
|
|
||||||
|
if (offset >= size)
|
||||||
|
return size;
|
||||||
|
p += offset / BITS_PER_LONG;
|
||||||
|
size -= result;
|
||||||
|
offset &= (BITS_PER_LONG - 1UL);
|
||||||
|
if (offset) {
|
||||||
|
tmp = __swab32(*(p++));
|
||||||
|
tmp &= (~0UL << offset);
|
||||||
|
if (size < BITS_PER_LONG)
|
||||||
|
goto found_first;
|
||||||
|
if (tmp)
|
||||||
|
goto found_middle;
|
||||||
|
size -= BITS_PER_LONG;
|
||||||
|
result += BITS_PER_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (size & ~(BITS_PER_LONG - 1)) {
|
||||||
|
tmp = *(p++);
|
||||||
|
if (tmp)
|
||||||
|
goto found_middle_swap;
|
||||||
|
result += BITS_PER_LONG;
|
||||||
|
size -= BITS_PER_LONG;
|
||||||
|
}
|
||||||
|
if (!size)
|
||||||
|
return result;
|
||||||
|
tmp = __swab32(*p);
|
||||||
|
found_first:
|
||||||
|
tmp &= (~0UL >> (BITS_PER_LONG - size));
|
||||||
|
if (tmp == 0UL) /* Are any bits set? */
|
||||||
|
return result + size; /* Nope. */
|
||||||
|
found_middle:
|
||||||
|
return result + __ffs(tmp);
|
||||||
|
|
||||||
|
found_middle_swap:
|
||||||
|
return result + __ffs(__swab32(tmp));
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#include <asm-generic/bitops/fls.h>
|
#include <asm-generic/bitops/fls.h>
|
||||||
|
|
Loading…
Reference in New Issue