Selaa lähdekoodia

x86: fix new find_first_bit()

Some edge problems with the original C rewrite.

Thanks go to Cal Peake, who pinpointed the breakage to the rewrite, and
tested this fixed version.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Linus Torvalds 20 vuotta sitten
vanhempi
commit
d6d2a2ab05
1 muutettua tiedostoa jossa 6 lisäystä ja 7 poistoa
  1. 6 7
      include/asm-i386/bitops.h

+ 6 - 7
include/asm-i386/bitops.h

@@ -335,14 +335,13 @@ static inline unsigned long __ffs(unsigned long word)
 static inline int find_first_bit(const unsigned long *addr, unsigned size)
 {
 	int x = 0;
-	do {
-		if (*addr)
-			return __ffs(*addr) + x;
-		addr++;
-		if (x >= size)
-			break;
+
+	while (x < size) {
+		unsigned long val = *addr++;
+		if (val)
+			return __ffs(val) + x;
 		x += (sizeof(*addr)<<3);
-	} while (1);
+	}
 	return x;
 }