Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25-rc7 /lib/find_next_bit.c

Filename:/lib/find_next_bit.c
Lines Added:43
Lines Deleted:0
Also changed in: (Previous) 2.6.25-rc6  2.6.25-rc5  2.6.25-rc4  2.6.25-rc3  2.6.25-rc2  2.6.25-rc1 
(Following) 2.6.25-rc8  2.6.25-rc9  2.6.25  2.6.25-git10  2.6.25-git11  2.6.25-git12 

Location
[  2.6.25-rc7
  [  lib
     o  find_next_bit.c

Patch

diff --git a/lib/find_next_bit.c b/lib/find_next_bit.c
index bda0d71..78ccd73 100644
--- a/lib/find_next_bit.c
+++ b/lib/find_next_bit.c
@@ -178,4 +178,47 @@ found_middle_swap:
 
 EXPORT_SYMBOL(generic_find_next_zero_le_bit);
 
+unsigned long generic_find_next_le_bit(const unsigned long *addr, unsigned
+      long size, unsigned long offset)
+{
+   const unsigned long *p = addr + BITOP_WORD(offset);
+   unsigned long result = offset & ~(BITS_PER_LONG - 1);
+   unsigned long tmp;
+
+   if (offset >= size)
+      return size;
+   size -= result;
+   offset &= (BITS_PER_LONG - 1UL);
+   if (offset) {
+      tmp = ext2_swabp(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 = ext2_swabp(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(ext2_swab(tmp));
+}
+EXPORT_SYMBOL(generic_find_next_le_bit);
 #endif /* __BIG_ENDIAN */


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.