1 Index: linux-2.6.9/include/asm-i386/bitops.h
2 ===================================================================
3 --- linux-2.6.9.orig/include/asm-i386/bitops.h 2004-10-19 05:54:37.000000000 +0800
4 +++ linux-2.6.9/include/asm-i386/bitops.h 2006-09-01 14:04:19.000000000 +0800
6 find_first_zero_bit((unsigned long*)addr, size)
7 #define ext2_find_next_zero_bit(addr, size, off) \
8 find_next_zero_bit((unsigned long*)addr, size, off)
9 +#define ext2_find_next_le_bit(addr, size, off) \
10 + find_next_bit((unsigned long*)(addr), (size), (off))
12 /* Bitmap functions for the minix filesystem. */
13 #define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,(void*)addr)
14 Index: linux-2.6.9/include/asm-x86_64/bitops.h
15 ===================================================================
16 --- linux-2.6.9.orig/include/asm-x86_64/bitops.h 2004-10-19 05:53:51.000000000 +0800
17 +++ linux-2.6.9/include/asm-x86_64/bitops.h 2006-09-01 14:04:19.000000000 +0800
19 find_first_zero_bit((unsigned long*)addr, size)
20 #define ext2_find_next_zero_bit(addr, size, off) \
21 find_next_zero_bit((unsigned long*)addr, size, off)
22 +#define ext2_find_next_le_bit(addr, size, off) \
23 + find_next_bit((unsigned long*)(addr), (size), (off))
25 /* Bitmap functions for the minix filesystem. */
26 #define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,(void*)addr)
27 Index: linux-2.6.9/include/asm-ia64/bitops.h
28 ===================================================================
29 --- linux-2.6.9.orig/include/asm-ia64/bitops.h 2004-10-19 05:55:07.000000000 +0800
30 +++ linux-2.6.9/include/asm-ia64/bitops.h 2006-09-01 14:04:19.000000000 +0800
32 #define ext2_test_bit test_bit
33 #define ext2_find_first_zero_bit find_first_zero_bit
34 #define ext2_find_next_zero_bit find_next_zero_bit
35 +#define ext2_find_next_le_bit(addr, size, off) \
36 + __find_next_bit((addr), (size), (off))
38 /* Bitmap functions for the minix filesystem. */
39 #define minix_test_and_set_bit(nr,addr) test_and_set_bit(nr,addr)
40 Index: linux-2.6.9/include/asm-ppc/bitops.h
41 ===================================================================
42 --- linux-2.6.9.orig/include/asm-ppc/bitops.h 2004-10-19 05:54:08.000000000 +0800
43 +++ linux-2.6.9/include/asm-ppc/bitops.h 2006-09-01 14:04:35.000000000 +0800
45 return result + ffz(tmp);
48 +#define ext2_find_next_le_bit(addr, size, off) \
49 + generic_find_next_le_bit((addr), (size), (off))
51 +static __inline__ unsigned long generic_find_next_le_bit(const void *addr,
52 + unsigned long size, unsigned long offset)
54 + unsigned int *p = ((unsigned int*) addr) + (offset >> 5);
55 + unsigned int result = offset & ~31UL;
63 + tmp = cpu_to_le32p(p++);
64 + tmp &= ~0UL << offset;
72 + while (size >= 32) {
73 + if ((tmp = cpu_to_le32p(p++)))
80 + tmp = cpu_to_le32p(p);
82 + tmp &= ~0U >> (32 - size);
83 + if (tmp == 0UL) /* Are any bits set? */
84 + return result + size; /* Nope. */
86 + return result + __ffs(tmp);
89 /* Bitmap functions for the minix filesystem. */
90 #define minix_test_and_set_bit(nr,addr) ext2_set_bit(nr,addr)
91 #define minix_set_bit(nr,addr) ((void)ext2_set_bit(nr,addr))
92 Index: linux-2.6.9/include/asm-ppc64/bitops.h
93 ===================================================================
94 --- linux-2.6.9.orig/include/asm-ppc64/bitops.h 2004-10-19 05:55:43.000000000 +0800
95 +++ linux-2.6.9/include/asm-ppc64/bitops.h 2006-09-01 14:05:00.000000000 +0800
97 find_first_zero_le_bit((unsigned long*)addr, size)
98 #define ext2_find_next_zero_bit(addr, size, off) \
99 find_next_zero_le_bit((unsigned long*)addr, size, off)
100 +#define ext2_find_next_le_bit(addr, size, off) \
101 + generic_find_next_le_bit((unsigned long*)(addr), (size), (off))
102 +extern unsigned long generic_find_next_le_bit(const unsigned long *addr, unsigned long size, unsigned long offset);
104 #define minix_test_and_set_bit(nr,addr) test_and_set_bit(nr,addr)
105 #define minix_set_bit(nr,addr) set_bit(nr,addr)
106 Index: linux-2.6.9/arch/ppc64/kernel/bitops.c
107 ===================================================================
108 --- linux-2.6.9.orig/arch/ppc64/kernel/bitops.c 2004-10-19 05:54:37.000000000 +0800
109 +++ linux-2.6.9/arch/ppc64/kernel/bitops.c 2006-09-01 14:05:25.000000000 +0800
113 EXPORT_SYMBOL(find_next_zero_le_bit);
115 +unsigned long generic_find_next_le_bit(const unsigned long *addr, unsigned long size,
116 + unsigned long offset)
118 + const unsigned long *p = addr + offset / BITS_PER_LONG;
119 + unsigned long result = offset & ~(BITS_PER_LONG - 1);
122 + if (offset >= size)
125 + offset %= BITS_PER_LONG;
127 + tmp = __swab64p(p++);
128 + tmp &= (~0UL << offset);
129 + if (size < BITS_PER_LONG)
133 + size -= BITS_PER_LONG;
134 + result += BITS_PER_LONG;
136 + while (size & ~(BITS_PER_LONG - 1)) {
137 + if ((tmp = __swab64p(p++)))
139 + result += BITS_PER_LONG;
140 + size -= BITS_PER_LONG;
144 + tmp = __swab64p(p);
146 + tmp &= ~0UL >> (BITS_PER_LONG - size);
148 + return result + size;
150 + return result + __ffs(tmp);
153 +EXPORT_SYMBOL(generic_find_next_le_bit);